Comment trouver le plus récent ancêtre commun de deux branches de Git?
Vous recherchez git merge-base
. Usage:
$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
git diff master...feature
affiche tous les nouveaux commits de votre branche de fonctionnalité actuelle (éventuellement multi-validation).
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 à mémoriser.
Comme mentionné par par Dave , le cas spécial de HEAD
peut être omis. Alors:
git diff master...HEAD
est le même que:
git diff master...
ce qui suffit si la branche actuelle est feature
.
Enfin, rappelez-vous que l'ordre est important! Faire git diff feature...master
affichera les modifications qui sont sur master
pas sur feature
.
Je souhaite que plus de commandes git supportent cette syntaxe, mais je ne pense pas qu'elles le font. Et certains ont même une sémantique différente pour ...
: Quelles sont les différences entre les doubles points ".." et les trois points "..." dans les intervalles de commit Git?
Comme indiqué dans une réponse précédente, git merge-base
fonctionne:
$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
mais si myfeature
est la branche actuelle, comme cela est courant, vous pouvez utiliser --fork-point
:
$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
Cet argument ne fonctionne que dans les versions suffisamment récentes de git. Malheureusement, cela ne fonctionne pas toujours, cependant, et on ne sait pas pourquoi. Veuillez vous référer aux limitations notées vers la fin de cette réponse .
Pour les informations de validation complètes, considérez:
$ git log -1 $(git merge-base --fork-point develop)
Avec gitk
, vous pouvez visualiser graphiquement les deux branches:
gitk branch1 branch2
Et puis, il est facile de trouver l’ancêtre commun dans l’histoire des deux branches.
Pour trouver le point où votre branche actuelle a commencé à diverger du maître:
git merge-base HEAD Origin/master