Câu trả lời:
Bạn có thể làm:
git diff master~20:pom.xml pom.xml
... để so sánh hiện tại của bạn pom.xml
với một trong master
20 bản sửa đổi trước đây thông qua phụ huynh đầu tiên. master~20
Tất nhiên, bạn có thể thay thế bằng tên đối tượng (SHA1sum) của một cam kết hoặc bất kỳ cách nào khác để chỉ định sửa đổi .
Lưu ý rằng đây thực sự là so sánh pom.xml
phiên bản cũ với phiên bản trong cây làm việc của bạn, chứ không phải phiên bản đã cam kết master
. Nếu bạn muốn điều đó, thì bạn có thể làm như sau:
git diff master~20:pom.xml master:pom.xml
git diff <revision> <path>
Ví dụ:
git diff b0d14a4 foobar.txt
git diff <revision> root/path/file
.
Nếu bạn muốn thấy sự khác biệt giữa lần xác nhận cuối cùng của một tệp, bạn có thể thực hiện:
git log -p -1 filename
Điều này sẽ cung cấp cho bạn sự khác biệt của tệp trong git, không so sánh tệp cục bộ của bạn.
-1
từng bước cho đến khi bạn nhận được các thay đổi.
gitlog () { git log -${3:-p} -${2:-1} $1; }
Được sử dụng như: gitlog Rakefile
hoặc gitlog Rakefile 5
và gitlog Rakefile 10 s
. Cái đầu tiên cho thấy một khác biệt; thứ hai cho thấy năm khác biệt; thứ ba cho thấy mười --no-patch
.
Để xem những gì đã được thay đổi trong một tệp trong lần xác nhận cuối cùng:
git diff HEAD~1 path/to/file.
Bạn có thể thay đổi số (~ 1) thành cam kết thứ n mà bạn muốn tìm khác biệt.
HEAD~1
được thay thế <revision>
, điều này làm cho câu trả lời này bị trùng lặp.
Cú pháp chung:
$git diff oldCommit..newCommit -- **FileName.xml > ~/diff.txt
cho tất cả các tệp có tên "FileName.xml" ở bất kỳ đâu trong repo của bạn.
Lưu ý khoảng trắng giữa "-" và "**"
Trả lời cho câu hỏi của bạn:
$git checkout master
$git diff oldCommit..HEAD -- **pom.xml
or
$git diff oldCommit..HEAD -- relative/path/to/pom.xml
như mọi khi với git, bạn có thể sử dụng thẻ / sha1 / "HEAD ^" để xác nhận cam kết.
Đã thử nghiệm với git 1.9.1 trên Ubuntu.
Nếu không cam kết nào là ĐẦU của bạn thì việc mở rộng cú đúp của bash chứng tỏ thực sự hữu ích, đặc biệt nếu tên tệp của bạn dài, ví dụ trên:
git diff master~20:pom.xml master:pom.xml
Sẽ trở thành
git diff {master~20,master}:pom.xml
Thêm về mở rộng Brace với bash.
git diff -w gốc nguồn / đường dẫn chính / đến / tệp
Nếu bạn ổn bằng cách sử dụng một công cụ đồ họa (hoặc thậm chí thích nó), bạn có thể:
gitk pom.xml
Trong gitk, sau đó bạn có thể nhấp vào bất kỳ cam kết nào (để "chọn" nó) và nhấp chuột phải vào bất kỳ cam kết nào khác để chọn "Diff this -> select" hoặc "Diff select -> this" trong menu bật lên, tùy theo thứ tự bạn thích.
Đối với những người quan tâm đến việc làm tương tự từ GitHub, hãy xem so sánh các cam kết theo thời gian .
Nếu bạn cần tìm khác biệt trên một tệp trong một ngăn, ví dụ bạn có thể làm
git diff stash@{0} -- path/to/file
Nếu bạn đang tìm kiếm khác biệt trên một cam kết cụ thể và bạn muốn sử dụng giao diện người dùng github thay vì dòng lệnh (giả sử bạn muốn liên kết nó với những người khác), bạn có thể làm:
https://github.com/<org>/<repo>/commit/<commit-sha>/<path-to-file>
Ví dụ:
Lưu ý các liên kết Trước và Tiếp theo ở trên cùng bên phải cho phép bạn điều hướng qua tất cả các tệp trong cam kết.
Điều này chỉ hoạt động cho một cam kết cụ thể, không phải để so sánh giữa bất kỳ hai phiên bản tùy ý.
git diff <revision>:foo/ HEAD:foo/
.