Comment lister les branches qui contiennent une commettre?

Comment puis-je interroger git pour savoir quelles branches contiennent un commit donné? gitk listera généralement les branches, à moins qu'il n'y en ait trop, auquel cas il dit simplement "beaucoup (38)" ou quelque chose comme ça. J'ai besoin de connaître la liste complète, ou au moins si certaines branches contiennent le commit.

900
demandé sur ThiefMaster 2009-09-14 08:03:10

2 réponses

À partir de la page de manuel de git-branch :

 git branch --contains <commit>

Liste uniquement les branches qui contiennent le commit spécifié (HEAD si non spécifié). Implique --list.


 git branch -r --contains <commit>

Listes suivi à distance des branches ainsi (comme mentionné dans user3941992's réponse ci-dessous) qui est "branches locales qui ont une relation directe avec une branche distante".


Voir aussi ce git prêt article.

La balise --contains déterminera si un certain commit a encore été introduit dans votre branche. Peut-être avez-vous un SHA de validation d'un patch que vous pensiez avoir appliqué, ou vous voulez juste vérifier si le commit pour votre projet open source préféré qui réduit l'utilisation de la mémoire de 75% est encore disponible.

$ git log -1 tests
commit d590f2ac0635ec0053c4a7377bd929943d475297
Author: Nick Quaranto <nick@quaran.to>
Date:   Wed Apr 1 20:38:59 2009 -0400

    Green all around, finally.

$ git branch --contains d590f2
  tests
* master

Remarque: si le commit est sur une branche de suivi à distance , ajoutez l'option -a .
(comme MichielB commentaires ci-dessous)

git branch -a --contains <commit>

MatrixFrog commente qu'il montre seulement quelles branches contiennent cetteexacte commit.
Si vous voulez savoir quelles branches contiennent un commit "équivalent" (c'est-à-dire quelles branches ont choisi ce commit), c'estgit cherry:

Parce que git cherry compare le jeu de modifications plutôt que l'id de validation (sha1) , Vous pouvez utiliser git cherry pour savoir si une validation que vous avez effectuée localement a été appliquée <upstream> sous un ID de commit différent.
Par exemple, cela se produira si vous alimentez des correctifs <upstream> par e-mail plutôt que de pousser ou de tirer des commits directement.

           __*__*__*__*__> <upstream>
          /
fork-point
          \__+__+__-__+__+__-__+__> <head>

(Ici, les commits marqué '- " ne serait pas avec git cherry, ce qui signifie qu'ils sont déjà présents dans <upstream>.)

1216
répondu VonC 2017-07-07 22:24:33

Vous pouvez exécuter:

git log <SHA1>..HEAD --ancestry-path --merges

À partir du commentaire de la dernière validation dans la sortie, vous pouvez trouver branche d'origine Nom

Exemple:

       c---e---g--- feature
      /         \
-a---b---d---f---h---j--- master

git log e..master --ancestry-path --merges

commit h
Merge: g f
Author: Eugen Konkov <>
Date:   Sat Oct 1 00:54:18 2016 +0300

    Merge branch 'feature' into master
12
répondu Eugen Konkov 2016-10-29 13:58:20