git diff уникален для коммита слияния - PullRequest
8 голосов
/ 16 июля 2011

Допустим, у меня есть

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

. Я могу легко получить разность DE, выполнив

git diff D..E --name-status

и то же самое для EF и EA.F - коммит слияния, и говорят, что у него был конфликт.Это было решено путем изменения foo.bar.foo.bar был добавлен в git, затем был зафиксирован коммит слияния.Конфликт слияния был разрешен.

Теперь изменение для foo.bar существует только в коммите F. Как получить этот diff?

Есть ли способ получить diff файлов, которые былиуникальным образом введен в коммите слияния?

Ответы [ 2 ]

7 голосов
/ 16 июля 2011

git show в коммите слияния покажет изменения, не принадлежащие ни одному из его родителей.Например:

$ 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 0123 > file1.txt
$ git commit -am '0123'

$ git merge test
$ echo 01234 > 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 @@@
- 0123
 -1234
++01234
0 голосов
/ 16 июля 2011

Не уверен, что именно означает "файлы, которые были уникально введены в коммит слияния". Файл должен был существовать раньше, иначе не было бы конфликта. И «изменение для foo.bar существует только в коммите F» также не совсем корректно. Коммиты не содержат изменений. Вы можете увидеть разницу foo.bar точно так же, как и любой другой: git diff E F или git diff A F, в зависимости от того, за какой веткой вы хотите следовать.

...