web-dev-qa-db-fra.com

Affichage des validations effectuées directement dans une branche, sans tenir compte des fusions dans Git

Lors de l'utilisation de git, existe-t-il un moyen d'afficher les validations effectuées sur une branche, tout en ignorant toutes les validations apportées par la fusion?

J'essaie de passer en revue les modifications de code apportées sur une branche tout en ignorant celles que nous avons apportées sur d'autres branches qui ont été fusionnées. Je sais qu'il est presque impossible de montrer un diff de cette façon, mais j'aimerais pouvoir savoir quels engagements je dois revoir.

78
Channel Cat

--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 pouvez constater 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 le diff avec le premier parent avant de publier la fusion.

112
CB Bailey

Vous pouvez utiliser git cherry pour cela, il vous trouvera des validations qui n'ont pas encore été fusionnées en amont, ou des validations qui se trouvent sur une branche mais pas sur l'autre. Donc, étant donné deux branches nommées "votre-branche" et "maître":

git cherry -v your-branch master

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

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

Vous pouvez remarquer que les validations préfixées par "-" sont celles qui apparaissent dans les deux branches, tandis que celles validées avec "+" 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 "votre-branche" qui ne sont pas encore présents sur "master"

7
jbochniak

Une manière très hackish:

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

4
fge