web-dev-qa-db-fra.com

Afficher les validations impliquées dans une fusion préalable de git

Supposons que je crée une branche hotfix à partir d'une branche develop, que j'effectue deux commits, que je fusionne à nouveau vers la branche develop et que je détruise la branche hotfix.

Comment savoir quels commits faisaient partie de la fusion? Est-ce possible?

51

Si vous souhaitez voir toutes les validations fusionnées lors de 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 souhaite uniquement des validations liées à la dernière fusion, je dois utiliser git log -1 --merges --pretty=format:%P ce 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 via 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 jusqu'au courant HEAD 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 également le faire:

$ 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 cela comme un alias :)

PS: Évidemment, vous n'avez pas à garder le --graph --pretty=oneline --abbrev-commit options


Ressources:

37
Colin Hebert

Supposons que votre validation de fusion soit ab2f8173, git log ab2f8173^..ab2f8173 affichera les commits dans lesquels il 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
54
Jesse

Si vous avez un commit de fusion (dites a2345) et dis git log -1 a2345, il vous indiquera les noms des parents (c'est-à-dire les commits qui ont été fusionnés dans ce commit). C'est ça que vous cherchez?

1
Noufal Ibrahim