2012-06-06 30 views
7

Para cada defecto en el código, creo una rama separada. Cuando se fija defecto que combinar esta rama en el maestro, así que tengo la historia como se ilustra a continuación (vemos dos ramas con correcciones):Obtener git diff para cualquier rama fusionada

  defect1 fix   defect2 fix 
     a---b---c---d   e---f 
     /   \  / \ 
---o---1---x---y---z---2---o---3---w---4---o--- 

La pregunta es cómo conseguir diferencias para correc1 (entre el inicio de la rama (1) y branch end (2)) o fix2 (diff entre (3) y (4)) en cualquier punto del tiempo (por ejemplo, para cualquier defecto cerrado en el pasado).

Actualización: pregunta real es cómo averiguar Summs SHA de a y d o e y f para llevar a cabo el próximo comando obvio diff diff <commit> <commit>

+0

Solo como comentario. Plastic SCM (www, plasticscm.com) se adapta perfectamente a la rama por patrón de tareas/defectos.Usando Plastic puedes hacer clic derecho en una rama y presionar diff branch. Usando la línea de comando puede hacer 'cm diff ' –

Respuesta

6

La respuesta es sencilla:

git diff 1..d 

Esta muestra las diferencias entre el punto de bifurcación de su rama defect1 fix (es decir, 1) y su extremo (es decir, d).

Con el fin de encontrar el principio de la rama defect1 fix, utilice

git merge-base master defect1-fix-branch 

como se indica en esta respuesta: https://stackoverflow.com/a/2458173/520162.
Esto le da 1 según la documentación de git merge-base.

El final de la rama defect1 fix se identifica simplemente por su nombre. Por lo tanto, la búsqueda de todas las diferencias introducidas en defect1 fix, lo que necesita hacer

git diff 1..defect1-fix-branch 
+0

Derecha, quiero cambios entre ' .. ' y la pregunta es cómo averiguar 'SHAs' de' a' y 'd' si no fueron etiquetados. –

+0

@AlexanderNikolayev: ver la respuesta actualizada. – eckes

+1

¿No debería ser 'git diff .. '? Porque querrías incluir diff de '1' y' a' también (que es parte del desarrollo de branch). – Shahbaz

1

¿Qué hay de:

git diff <commit> <commit> 

Donde los parámetros cometer son las sumas de comprobación SHA de las confirmaciones reales.

+1

Sí, pero ¿cómo averiguar las sumas de comprobación de SHA de estas confirmaciones? –

+0

Puede verificarlo desde 'git log' –

0

Si desea ver qué cambios introdujo una rama de la característica, después de que se ha fusionado, simplemente ejecute:

git diff HEAD^..HEAD 

En la rama master. Esto muestra las diferencias entre el primer padre HEAD (merge commit) y el HEAD, que muestra de manera efectiva las diferencias en la fusión de toda la rama de características introducida en la rama principal.

No hay necesidad de hacer cosas complejas :)