2011-07-15 13 views
8

Nói rằng tôi có,diff git duy nhất để hợp nhất cam kết

 A topic 
    /\ 
D---E---F master 

tôi có thể dễ dàng nhận được sự khác biệt của D-E bằng cách làm

git diff D..E --name-status 

và tương tự cho E-F, và E-A.

Cam kết F là cam kết hợp nhất và nói rằng nó có xung đột. Nó đã được giải quyết bằng cách sửa đổi foo.bar. foo.bar đã được thêm vào, sau đó cam kết hợp nhất đã được cam kết. Xung đột hợp nhất đã được giải quyết.

Bây giờ thay đổi cho foo.bar chỉ tồn tại trong cam kết F. Làm thế nào để tôi nhận được sự khác biệt đó?

Có cách nào để có được sự khác biệt của các tệp được giới thiệu duy nhất trong cam kết hợp nhất không?

Trả lời

7

git show trên cam kết hợp nhất sẽ hiển thị các thay đổi không có trong bất kỳ cha mẹ nào. Ví dụ:

$ echo 123 > file1.txt 
$ git add file1.txt 
$ git commit -am '123' 

$ git checkout -b test 
$ echo 1234 > file1.txt 
$ git commit -am '1234' 

$ git checkout HEAD~ -b test2 
$ echo> file1.txt 
$ git commit -am '0123' 

$ git merge test 
$ echo> file1.txt 
$ git add file1.txt 
$ git commit -am 'Merge test' 

$ git show 
commit f056a1c91d76c8dfce60a03122494dce92c1e161 
Merge: 489f1d3 fcfd2bc 
Date: Fri Jul 15 20:30:17 2011 -0500 

    Merge test 

diff --cc file1.txt 
index 40381e2,81c545e..3521a84 
--- a/file1.txt 
+++ b/file1.txt 
@@@ -1,1 -1,1 +1,1 @@@ 
-
-1234 
+
0

Không chắc chắn chính xác "tệp được giới thiệu duy nhất trong cam kết hợp nhất" có nghĩa là gì. Tệp phải tồn tại trước đó, hoặc sẽ không có xung đột. Và "thay đổi cho foo.bar chỉ tồn tại trong cam kết F" cũng không chính xác. Cam kết không chứa thay đổi. Bạn có thể thấy foo.bar khác biệt giống với bất kỳ cách nào khác: git diff E F hoặc git diff A F, tùy thuộc vào nhánh bạn muốn theo dõi.