Il existe plusieurs façons d'obtenir ce résultat. La première option naïve consiste à utiliser git log
et rechercher un commit spécifique en utilisant grep
mais ce n'est pas toujours précis
git log | grep <commit_id>
Il est préférable d'utiliser git branch
directement pour trouver toutes les branches contenant un COMMIT_ID
en utilisant
git branch --contains $COMMIT_ID
L'étape suivante consiste à trouver la branche actuelle, ce qui peut être fait depuis git 1.8.1
en utilisant
git symbolic-ref --short HEAD
Et combinés ensemble comme
git branch $(git symbolic-ref --short HEAD) --contains $COMMIT_ID
Mais la commande ci-dessus ne renvoie pas true ou false et il existe une version plus courte qui renvoie le code de sortie 0 si le commit est dans la branche courante OU le code de sortie 1 si ce n'est pas le cas.
git merge-base --is-ancestor $COMMIT_ID HEAD
Le code de sortie est bien, mais comme vous voulez une chaîne de caractères true
o false
comme réponse vous devez ajouter un peu plus et ensuite combiné avec if
à partir de bash vous obtenez
if [ 0 -eq $(git merge-base --is-ancestor $COMMIT_ID HEAD) ]; then echo "true"; else echo "false"; fi
7 votes
Duplicata possible de Comment lister les branches qui contiennent un commit donné ?
16 votes
Voir le duplicata proposé pour savoir comment trouver tous branches qui contiennent un commit spécifié. Pour savoir si le actuel la branche contient un commit C utiliser la commande "plomberie".
git merge-base --is-ancestor
. La branche actuelle contient C si C est un ancêtre deHEAD
donc :if git merge-base --is-ancestor $hash HEAD; then echo I contain commit $hash; else echo I do not contain commit $hash; fi
1 votes
Bonjour, veuillez soumettre cette réponse pour qu'elle soit sélectionnée comme réponse correcte =)
1 votes
@Ben - Je l'ai ajouté comme réponse au wiki communautaire.
1 votes
@torek une chose étrange que je trouve est que les docs sur
--is-ancestor
:Check if the first <commit> is an ancestor of the second <commit>, and exit with status 0 if true, or with status 1 if not.
. cela me fait penser que leif
dans votre extrait n'est pas le bon puisque la sortie se fait par le biais de0
pour vrai mais dans la pratique, cela semble fonctionner... la documentation pourrait-elle être erronée ou est-ce que je la lis mal ?2 votes
@Remover : dans le shell scripts, zéro est vrai, non zéro est faux : l'inverse de la convention C.
/bin/true
était initialement mis en œuvre commeexit 0
y/bin/false
comoexit 1
. (Les coquilles modernes sont alors intégrées).