Affichage des commits effectués directement dans une branche, ignorant les fusions dans Git

86

Lors de l'utilisation de git, existe-t-il un moyen d'afficher les commits effectués dans une branche, tout en ignorant tous les commits qui ont été introduits par la fusion?

J'essaie de passer en revue les modifications de code apportées à une branche tout en ignorant celles que nous avons apportées à d'autres branches qui ont été fusionnées. Je sais qu'il est pratiquement impossible d'afficher une différence de cette façon, mais j'aimerais pouvoir découvrez les engagements que je dois examiner.

Chat de canal
la source

Réponses:

123

--no-merges

Les deux parents ont le même poids dans de nombreux contextes dans git. Si vous avez toujours été cohérent dans la fusion d'autres modifications, vous constaterez peut-être que cela vous donne ce que vous voulez.

git log --no-merges --first-parent

Sinon, vous pourrez peut-être exclure les validations d'autres branches nommées.

git log --no-merges ^other-branch-1 ^other-branch-2 ^other-branch-3

Si vous souhaitez revoir les modifications que vous allez fusionner dans une branche principale, la chose la plus simple à faire est d'effectuer la fusion sur un clone local, puis de regarder simplement la différence avec le premier parent avant de publier la fusion.

CB Bailey
la source
Cette première commande est excellente dans la "bonne branche par fonction" ( plus.google.com/109096274754593704906/posts/R4qkeyRadLR )
Adam Dymitruk
1
Il semble que je reçois principalement des commits de cette branche, mais cela montre toujours des commits qui ont été extraits du maître. Nous avons tellement de succursales qu'il serait impossible d'en exclure d'autres.
Channel Cat
@ChannelCat pourquoi ne pas rebaser votre branche sur l'autre, alors tous les commits seront à la fin?
Mark Ingram
7

Vous pouvez l'utiliser git cherrypour cela, il vous trouvera des commits qui n'ont pas encore été fusionnés avec l'amont, ou des commits qui sont sur une branche mais pas sur l'autre. Donc, étant donné deux branches nommées "your-branch" et "master":

git cherry -v your-branch master

vous présentera la liste des commits par rapport à leur identifiant de patch:

+ c3e441bf4759d4aa698b4a413f1f03368206e82f Updated Readme
- 2a9b2f5ab1fdb9ee0a630e62ca7aebbebd77f9a7 Fixed formatting
+ e037c1d90b812af27dce6ed11d2db9454a6a74c2 Corrected spelling mistake

Vous pouvez remarquer que les commits préfixés par "-" sont ceux qui apparaissent dans les deux branches, alors que ceux précédés de "+" ne sont disponibles que sur votre branche.

Comme alternative, vous pouvez utiliser:

git log --pretty=format:"%h %s" your-branch..master --no-merges

qui vous montrera la liste des commits effectués sur "your-branch" qui ne sont pas encore présents sur "master"

jbochniak
la source
Comme ma tentative de modifier votre réponse a été rejetée, je la posterai ici: dans votre dernière ligne git, il devrait y avoir trois points, et non deux, entre les noms des branches. Like this: your-branch ... master
vedranm
@vedranm Vous n'avez pas besoin de 3 points, seulement deux ... bien que 3 fonctionne de la même manière que 2 fonctionne.
Zzzach ...
4

Une manière très hackish:

git log --graph --oneline --no-merges thebranch|grep '^\*'

fge
la source