2012-03-11 30 views
39

Tôi quen với việc chạy một so sánh git mà sẽ cho phép so sánh với số vòng quay git địa phương như:git diff vào ngày?

git diff HEAD HEAD~110 -- some/file/path/file.ext 

Có thể sử dụng ngày để thay thế? Và nếu vậy, làm thế nào? Tôi muốn có thể chèn thay cho "110" trong ví dụ trên, một ngày như "4 tháng 12 năm 2012".

Trả lời

51
git diff HEAD '[email protected]{3 weeks ago}' -- some/file/path/file.ext 

Đây không phải là, nói đúng, bản sửa đổi được thực hiện ba tuần trước. Thay vào đó, đó là vị trí HEAD là ba tuần trước thời điểm hiện tại. Nhưng nó có thể đủ gần cho mục đích của bạn - nó sẽ rất chính xác nếu các chi nhánh hiện tại của HEAD di chuyển về phía trước đều đặn, như hầu hết các xu hướng để làm. Bạn có thể cải thiện độ chính xác bằng cách sử dụng tên chi nhánh thay vì HEAD.

Thay vì bù trừ từ hiện tại, bạn cũng có thể sử dụng ngày/giờ, như [email protected]{1979-02-26 18:30:00}. Xem git help rev-parse.

+0

Trên ZSH Tôi gặp lỗi: 'zsh: parse error near \'} ''Bất kỳ ý tưởng nào về những gì có thể xảy ra ở đó? – ylluminate

+3

'zsh' đang cố gắng diễn giải các dấu ngoặc cho bạn. Trích dẫn họ (dấu ngoặc kép xung quanh toàn bộ điều, hoặc dấu gạch chéo ngược trước mỗi cú đúp, hoặc bất cứ điều gì). – torek

+0

Phải, cảm ơn @torek. – ylluminate

1

Kết hợp Jonathan Stray's suggestion to use git-rev-list --before để tìm việc sửa đổi vào một ngày nhất định và Show just the current branch in Git:

#!/bin/sh 
if [ $# -eq 0 ] || [ "$1" = "--help" ]; then 
    cat <<EOF 
Usage: $0 DATE FILE... 
git diff on FILE... since the specified DATE on the current branch. 
EOF 
    exit 
fi 

branch1=$(git rev-parse --abbrev-ref HEAD) 
revision1=$(git rev-list -1 --before="$1" "$branch1") 
shift 

revision2=HEAD 

git diff "$revision1" "$revision2" -- "[email protected]" 

Gọi kịch bản này kèm theo ngày và tùy chọn một số tên tập tin, ví dụ

git-diff-since yesterday 
git-diff-since '4 Dec 2012' some/file/path/file.ext 
2

Điều bạn muốn là điều này.

git diff HEAD '@{3 weeks ago}' -- some/file/path/file.ext 

Bạn nên so sánh với @{3 weeks ago}, không phải [email protected]{3 weeks ago}.

Sự khác biệt là gì?

Nếu bạn ở trên chi nhánh khác 3 tuần trước, [email protected]{3 weeks ago} sẽ trỏ HEAD của nhánh, mặt khác @{3 weeks ago} sẽ trỏ HEAD của nhánh hiện tại.

Bạn cũng có thể đặt tên chi tiết một cách rõ ràng.

git diff HEAD '[email protected]{3 weeks ago}' -- some/file/path/file.ext 
Các vấn đề liên quan