web-dev-qa-db-fra.com

Git: Trouver le plus récent ancêtre commun de deux branches

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

693
Ted

Vous recherchez git merge-base . Usage:

$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
831
CB Bailey

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) 
15
A-B-B

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.

8
Martin G

Pour trouver le point où votre branche actuelle a commencé à diverger du maître:

git merge-base HEAD Origin/master
0
Harald Nordgren