Obtener git diff para cualquier twig fusionada

Para cada defecto en el código, creo una twig separada. Cuando se corrige el defecto, fusiono esta twig en el maestro, por lo que tengo un historial como el que se muestra a continuación (vemos dos twigs con correcciones):

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 get diff para fix1 (entre branch start (1) y branch end (2)) o fix2 (diff entre (3) y (4)) en cualquier punto del time (por ejemplo, para cualquier defecto cerrado en pasado) .

Actualización: la pregunta real es cómo resolver las sums SHA de a y d o e y f para realizar el siguiente command diff <commit> <commit> obvio diff <commit> <commit>

La respuesta es simple:

 git diff 1..d 

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

Para encontrar el inicio de la twig defect1 fix , use

 git merge-base master defect1-fix-branch 

como se indica en esta respuesta: http://sofes.miximages.com/a/2458173/520162 .
Esto te da 1 según la documentation de git merge-base .

El final de la twig del defect1 fix simplemente se identifica por su nombre. Entonces, al encontrar todas las diferencias introducidas en el defect1 fix , debes hacer

 git diff 1..defect1-fix-branch 

Nota: esto es equivalente, como se detalla en " No se puede pensar en un caso en el que el git diff master...lab git diff master..lab y el git diff master...lab sea ​​diferente ", para:

  git diff master...defect1-fix-branch 

git diff A...B es equivalente a git diff $(git merge-base AB) B

git diff dots

(De " git diff no se muestra suficiente ")

Qué pasa:

 git diff <commit> <commit> 

Donde los parameters de confirmación son las sums de comprobación SHA de las confirmaciones reales.

Si desea ver qué cambios introdujo una twig de características, después de que se haya fusionado, simplemente ejecute:

 git diff HEAD^..HEAD 

En la twig 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 twig de características introducida en la twig principal.

No hay necesidad de hacer las cosas complejas 🙂