Git: trouver l'ancêtre commun le plus récent de deux branches
5 réponses
vous recherchez git merge-base
. Usage:
$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
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?
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)
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.
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