Afficher les commits impliqués dans une fusion antérieure de git

Supposons que je crée une twig de hotfix partir d’une twig de develop , que je crée deux validations, que je fusionne cette twig avec la twig de develop et que je détruise la twig de hotfix .

Comment est-ce que je trouve quels commits faisaient partie de la fusion? Est-ce possible?

Si vous souhaitez voir toutes les validations fusionnées dans la dernière fusion, vous pouvez essayer cela:

 git log $(git merge-base --octopus $(git log -1 --merges --pretty=format:%P)).. --boundary 

Voici un exemple de mon journal actuel:

 $ git log --graph --pretty=oneline --abbrev-commit * 44899b9 pouf * 8f49f9c Merge branch 'test' |\ | * 3db39ca test * | 69f431c pif * | df1f51c lala |/ * 8fae178 pif2 * 20f8ba6 init 

Si je veux seulement des commits liés à la dernière fusion, je dois utiliser git log -1 --merges --pretty=format:%P qui me donne les parents de la première fusion disponible:

 $ git log -1 --merges --pretty=format:%P 69f431cec7859b61d33c7503c9431ceea2aaf3e0 3db39ca3ab1e8f70462db23d94590628b5e7ad7b 

Maintenant que je sais quels parents je dois suivre, j’ai besoin de leur base commune que je peux obtenir grâce à git merge-base --octopus (–octopus est là juste au cas où):

 $ git merge-base --octopus $(git log -1 --merges --pretty=format:%P) 8fae178666e34a480b22e40f858efd9e7c66c3ca 

Maintenant, avec git log je peux rechercher chaque commit depuis la base vers le HEAD actuel et voilà:

 $ git log $(git merge-base --octopus $(git log -1 --merges --pretty=format:%P)).. --boundary --graph --pretty=oneline --abbrev-commit * 44899b9 pouf * 8f49f9c Merge branch 'test' |\ | * 3db39ca test * | 69f431c pif * | df1f51c lala |/ o 8fae178 pif2 

Si vous êtes un peu perfectionniste, vous pouvez aussi faire ceci:

 $ git log $(git merge-base --octopus $(git log -1 --merges --pretty=format:%P))..$(git log -1 --merges --pretty=format:%H) --boundary --graph --pretty=oneline --abbrev-commit * 8f49f9c Merge branch 'test' |\ | * 3db39ca test * | 69f431c pif * | df1f51c lala |/ o 8fae178 pif2 

Maintenant, je pense que je vais garder ça comme un alias 🙂

PS: il est évident que vous n’avez pas à garder le --graph --pretty=oneline --abbrev-commit options


Ressources :

  • Git merge-base
  • Journal de Git
  • Révision Git

Disons que votre validation de fusion est ab2f8173 , git log ab2f8173^..ab2f8173 affichera les commits dans lesquels elle a fusionné.

Voici comment transformer ceci en un alias git pour une réutilisation facile:

 $ git config --global alias.merge-log '!f() { git log --stat "$1^..$1"; }; f' $ git merge-log 0865c12 

Si vous avez un commit de fusion (disons a2345 ) et que vous dîtes git log -1 a2345 , il vous indiquera les noms des parents (c’est-à-dire les commits qui ont été fusionnés dans ce commit). Est-ce ce que vous cherchez?