Git: trouver l'ancêtre commun le plus récent de deux branches

Comment trouver l'ancêtre commun le plus récent de deux branches Git?

641
git
demandé sur A-B-B 2009-10-11 01:43:09

5 réponses

vous recherchez git merge-base . Usage:

$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
765
répondu CB Bailey 2016-09-10 17:36:23

git diff master...feature

affiche toutes les nouvelles propagations de votre branche actuelle (éventuellement multi-commit).

man git-diff documents qui:

git diff A...B

est le même que:

git diff $(git merge-base A B) B

mais le ... est plus facile à taper et à retenir.

Comme mentionné par Dave , le cas particulier du HEAD peut être omis. So:

git diff master...HEAD

est le même que:

git diff master...

, ce qui est suffisant si la branche courante est feature .

enfin, rappelez-vous que l'ordre compte! Faire git diff feature...master montrera les changements qui sont sur master et non sur feature .

j'aimerais que plus de commandes git supportent cette syntaxe, mais je ne pense pas qu'elles le fassent. Et certains ont même une sémantique différente pour ... : Quelles sont les différences entre le double-point ".."et triple-point "..."dans Git commit plages?

24

comme indiqué dans une réponse antérieure, git merge-base fonctionne:

$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

mais si myfeature est la branche courante, comme c'est courant, vous pouvez utiliser --fork-point :

$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

Cet argument ne fonctionne que dans les versions récentes de git. Malheureusement, il ne fonctionne pas toujours, cependant, et il n'est pas clair pourquoi. Veuillez vous référer aux limites notées vers la fin de cette réponse .


"

$ git log -1 $(git merge-base --fork-point develop) 
12
répondu A-B-B 2018-03-26 21:12:48

avec gitk vous pouvez voir les deux branches graphiquement:

gitk branch1 branch2

Et puis il est facile de trouver l'ancêtre commun dans l'histoire des deux branches.

7
répondu Martin G 2017-02-08 17:52:06

une fois acquis, L'ancêtre commun SHA peut être utilisé, par exemple, pour visualiser les propagations disponibles sur la télécommande, comme suit:

#!/bin/bash

git remote update
REMBR=`git show-remote-branch`
REMHEAD=`git rev-parse $REMBR`
MERGEBASE=`git merge-base HEAD $REMBR`
REMURL=`git config remote.origin.url`

git request-pull $MERGEBASE $REMURL $REMHEAD
-2
répondu Ville 2015-07-09 22:36:11