995 votes

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 de Git ?

3 votes

Définir le plus récent : temps réel, nombre de commits, autre métrique ?

2 votes

Pertinent (fusions croisées) : stackoverflow.com/questions/26370185/

1 votes

@CiroSantilli996ICU c'est la même chose dans n'importe quelle métrique, n'est-ce pas ?

1225voto

Charles Bailey Points 244082

Vous êtes à la recherche de git merge-base . Utilisation :

$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

101 votes

Notez que cela trouve l'ancêtre commun le plus récent... ce qui, je crois, est ce que le questionneur veut, donc +1. Je le note juste, au cas où quelqu'un viendrait ici pour essayer de trouver l'ancêtre commun le plus récent. le plus ancien ancêtre commun (comme je l'ai fait) -- pour lequel, voir aussi : stackoverflow.com/questions/1527234/

2 votes

C'est probablement ce qu'il cherchait, mais la page de manuel ne garantit pas que ce sera le plus récent ni en temps réel ni en nombre de commits : seulement que ce sera l'un des meilleurs ancêtres communs.

1 votes

Je pense que je vais beaucoup utiliser ce petit bout de papier : $(git merge-base HEAD master) . Par exemple, git log $(git merge-base HEAD master)..HEAD

96voto

knittl Points 64110

Utiliser git merge-base A B

65voto

Ciro Santilli Points 3341

git diff master...feature

montre tous les nouveaux commits de votre branche de fonctionnalité actuelle (éventuellement multi-commits).

man git-diff des documents qui :

git diff A...B

est la même chose que :

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

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

Comme indiqué par Dave le cas particulier de HEAD peut être omise. Ainsi :

git diff master...HEAD

est la même chose que :

git diff master...

ce qui est suffisant si la branche actuelle est feature .

Enfin, n'oubliez pas que l'ordre est important ! Faire git diff feature...master montrera les changements qui sont sur master pas sur feature .

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

45voto

A-B-B Points 797

Comme indiqué dans une réponse précédente, bien que git merge-base travaux,

$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

Si myfeature est la branche actuelle, comme il 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, il ne fonctionne pas toujours, et il n'est pas clair pourquoi. Veuillez vous référer aux limitations notées vers la fin du document cette réponse .


Pour des informations complètes sur les engagements, voir :

$ git log -1 $(git merge-base --fork-point develop)

13voto

Martin Points 481

Avec gitk vous pouvez visualiser les deux branches graphiquement :

gitk branch1 branch2

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X