2011-07-15 39 views
8

Decir que tengo,git diff única para fusionar cometer

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

me puede conseguir fácilmente el diff de D-E haciendo

git diff D..E --name-status 

y lo mismo para E-F, y E-A.

Commit F es un compromiso de fusión, y dicen que tuvo un conflicto. Se resolvió modificando foo.bar. foo.bar se agregó git y luego se confirmó la fusión. El conflicto de fusión fue resuelto.

Ahora el cambio para foo.bar existe solo en commit F. ¿Cómo obtengo esa diferencia?

¿Hay alguna manera de obtener la diferencia de los archivos que se introdujeron de forma exclusiva en una confirmación de fusión?

Respuesta

7

git show en la combinación confirmar mostrará los cambios en ninguno de sus padres. Por ejemplo:

$ 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

No estoy seguro exactamente de qué significa "archivos que se introdujeron de forma única en una fusión". El archivo tenía que existir antes, o no habría habido un conflicto. Y "el cambio para foo.bar existe solo en commit F" tampoco es exactamente correcto. Los compromisos no contienen cambios. Puede ver la diferencia foo.bar exactamente igual que cualquier otra: git diff E F o git diff A F, dependiendo de qué rama desea seguir.