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


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


616
2017-10-10 21:43


origine


Réponses:


Tu recherches git merge-base. Usage:

$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

730
2017-10-10 21:47



git diff master...feature

affiche toutes les nouvelles validations 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 de HEAD peut être omis. Alors:

git diff master...HEAD

est le même que:

git diff master...

ce qui est suffisant si la branche actuelle est feature.

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

Je souhaite que plus de commandes git supporteraient 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 "." À double point et "..." à triple point dans les plages de validation Git?


23
2017-07-18 12:39



Comme noté dans une réponse précédente, git merge-base travaux:

$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

mais si myfeature est la branche actuelle, comme c'est commun, vous pouvez utiliser l'utilisation --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, et on ne sait pas pourquoi. Veuillez vous reporter aux limites indiquées vers la fin de cette réponse.


Pour obtenir des informations complètes sur la validation, pensez à:

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

12
2018-02-09 17:23



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.


6
2018-02-08 17:52



Une fois acquis, l'ancêtre commun SHA peut être utilisé, par exemple, pour voir les commits disponibles sur la télécommande, comme ceci:

#!/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
2017-07-09 20:38