Trên thực tế tất cảgit diff
s là cam-cặp-khôn ngoan: ở trên so sánh cây/tệp trong số abc000
so với các cây/tệp trong số def555
. Ví dụ: def333
thay đổi dir/file
nhưng không có thay đổi đối với dir/file
giữa abc000
và def555
(ví dụ: thay đổi trong def333
bị hủy bởi một điều gì đó trên đường đi), bạn có thể không thấy dir/file
trong đó.
Nói chung, tuy nhiên, những thay đổi được thực hiện trong def333
sẽ thay đổi dir/file
trong một cách mà xuất hiện khi so sánh các phiên bản trong abc000
chống lại một trong def555
. Vì vậy, bạn sẽ có lẽ thấy thay đổi đó.
Cách dễ nhất để có được sự khác biệt là "def555
sẽ trông như thế nào nếu def333
được hoàn nguyên" là thực hiện điều đó: tạo cây (trên nhánh tạm thời) với thay đổi được hoàn nguyên. Để làm điều đó với một chi nhánh được đặt tên thực tế, bạn có thể làm như sau:
git checkout def555 # by ID, so that you get a "detached HEAD"
git checkout -b temp-branch
git revert --no-edit def333
git diff [options] abc000
git checkout somebranch; git branch -D temp-branch
Nếu bạn không muốn nhánh tạm thời thì sao? Vâng, đó là tầm thường: chỉ cần không tạo ra một. Nhận "HEAD tách rời" như trên, thực hiện hoàn nguyên như trên và sau đó git checkout somebranch
. Không có nhánh tạm thời nào để xóa, ngoại trừ cái tên chưa được đặt tên mà git sẽ cảnh báo rằng bạn đang bỏ lại phía sau ... đó chỉ là những gì bạn muốn.
Bạn cũng có thể sử dụng 'hoàn nguyên - không cam kết', sau đó bạn sẽ không cần một nhánh (hoặc đầu bị tách rời) ở tất cả và không để lại gì phía sau. – Bergi
@Bergi: true (mặc dù sau đó bạn sẽ cần phải "git reset --hard' để làm sạch cây công việc sau khi bạn đã hoàn tất). – torek