web-dev-qa-db-fra.com

Git: comment lister les validations sur cette branche mais pas à partir des branches fusionnées

Supposons que votre historique de validation git ressemble à ceci:

A---B---C---D---E---F master
     \         /
      X---Y---Z topic

Est-il possible d'avoir git list uniquement les commits sur master, A-F? En d'autres termes, si le commit était sur une branche fusionnée, je ne veux pas qu'il s'affiche.

76
wch

git log a l'option --first-parent, vous n'aurez donc pas d'historique topic.

Lorsqu'ils sont fusionnés à partir de master, les commits master sont les premiers parents à fusionner. Le journal Git permet d'afficher uniquement les validations avec --first-parent, afin que vous obteniez les bons éléments.

120
CharlesB

Il existe une autre manière générale de procéder, qui ne repose pas sur --first-parent, Qui sera utile dans certaines situations .. en utilisant les filtres d'exclusion de branche

git log Origin/topic ^Origin/master Cela vous donnera un journal de Origin/topic Avec tous les commits de Origin/master Supprimés.

vous pouvez également ajouter --no-merges qui masquera les validations de fusion que vous souhaiterez ou non.

Une autre astuce est d'utiliser shortlog au lieu de log qui vous donnera plus d'un résumé abrégé qui peut être pratique pour les notes de publication ou la communication de ce qui est dans une branche.

Mise à jour
Après avoir relu ceci, vous voudriez en fait presque l'inverse de ce que j'ai publié; mais cela finirait par exclure tout ce qui est sur master et foo (git log Origin/master ^Origin/foo). Cependant, vous pouvez également obtenir ce que vous demandez (masquer tous les commits faisant partie des fusions) avec git log Origin/master --no-merges

17
UpAndAdam