Wie liste ich Zweige auf, die ein bestimmtes Commit enthalten?

1087

Wie kann ich git abfragen, um herauszufinden, welche Zweige ein bestimmtes Commit enthalten? gitkIn der Regel werden die Zweige aufgelistet, es sei denn, es gibt zu viele. In diesem Fall wird nur "viele (38)" oder ähnliches angezeigt. Ich muss die vollständige Liste kennen oder zumindest wissen, ob bestimmte Zweige das Commit enthalten.

Andrew Arnott
quelle
Verwandte Frage für ein gleichwertiges Commit pro Kommentar: stackoverflow.com/questions/16304574/…
UpAndAdam

Antworten:

1470

Von der git-branch Handbuchseite :

 git branch --contains <commit>

Listen Sie nur Zweige auf, die das angegebene Commit enthalten (HEAD, falls nicht angegeben). Impliziert --list.


 git branch -r --contains <commit>

Listen Remote - Tracking - Filialen als auch (wie in erwähnt user3941992 ‚s Antwort unten) , die‚lokale Niederlassungen , die eine direkte Beziehung zu einem entfernten Zweig haben‘sind.


Siehe auch diesen git ready Artikel.

Das --containsTag wird herausfinden, ob ein bestimmtes Commit bereits in Ihre Filiale eingegeben wurde. Vielleicht haben Sie einen Commit-SHA von einem Patch, von dem Sie dachten, Sie hätten ihn angewendet, oder Sie möchten nur überprüfen, ob ein Commit für Ihr bevorzugtes Open Source-Projekt, das die Speichernutzung um 75% reduziert, noch vorhanden ist.

$ git log -1 tests
commit d590f2ac0635ec0053c4a7377bd929943d475297
Author: Nick Quaranto <[email protected]>
Date:   Wed Apr 1 20:38:59 2009 -0400

    Green all around, finally.

$ git branch --contains d590f2
  tests
* master

Hinweis: Wenn sich das Commit in einem Remote-Tracking-Zweig befindet , fügen Sie die -aOption hinzu .
(wie MichielB unten kommentiert )

git branch -a --contains <commit>

MatrixFrog gibt an , dass nur angezeigt wird , welche Zweige genau dieses Commit enthalten.
Wenn Sie wissen möchten, welche Zweige ein "äquivalentes" Commit enthalten (dh welche Zweige dieses Commit ausgewählt haben), gilt Folgendes git cherry:

Da git cherry der Änderungssatz anstelle der Festschreibungs-ID (sha1) verglichen wird , können Sie git cherryherausfinden, ob ein lokal vorgenommenes Festschreiben<upstream> unter einer anderen Festschreibungs-ID angewendet wurde .
Dies ist beispielsweise der Fall, wenn Sie Patches <upstream>per E-Mail füttern, anstatt Commits direkt zu verschieben oder abzurufen.

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

(Hier werden die mit ' -' gekennzeichneten Commits nicht angezeigt git cherry, was bedeutet, dass sie bereits vorhanden sind <upstream>.)

VonC
quelle
3
testsund master- masterist der aktuelle Zweig, daher das Sternchen.
Blueyed
54
Dies zeigt nur, welche Zweige genau dieses Commit enthalten . Wenn Sie wissen möchten, welche Zweige ein "äquivalentes" Commit enthalten (dh welche Zweige dieses Commit ausgewählt haben), git cherrylautet dies: "Da git cherry den Änderungssatz und nicht die Commit-ID (sha1) vergleicht, können Sie git cherry verwenden, um dies herauszufinden Wenn ein Commit, das Sie lokal vorgenommen haben, <upstream> unter einer anderen Commit-ID angewendet wurde. Dies geschieht beispielsweise, wenn Sie Patches <upstream> per E-Mail füttern, anstatt Commits direkt zu verschieben oder abzurufen. " kernel.org/pub/software/scm/git/docs/git-cherry.html
MatrixFrog
62
Fügen Sie einen -aParameter hinzu, um auch entfernte Zweige zu überprüfen.
Raman
28
Sie können auch tun git tag --contains <commit>. Siehe Suchen nach allen Tags, die ein Commit enthalten? .
Andrew Marshall
5
Für den git cherryTeil @UpAndAdam wurde die Frage hier gestellt: stackoverflow.com/questions/16304574/… , leider wurde die Frage (noch) nicht beantwortet.
Adeelx
22

Sie können ausführen:

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

Von Kommentar der letzten in der Ausgabe begehen können Sie feststellen , ursprüngliche Zweignamen

Beispiel:

       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
Eugen Konkov
quelle
6
Nett! Ich habe das git log <SHA1>..master --ancestry-path --merges --oneline | tail -n1in einer Zeile bekommen
James EJ
1
Wenn Sie den reinen Git-Befehl verwenden möchten, können Sie Folgendes verwenden:git log <SHA1>..master --ancestry-path --merges --oneline -1
Bartosz
Hinweis: Wenn Ihr Commit sha das letzte Commit im Master / Foo-Zweig (HEAD) ist ... können Sie keinen A..BCommit-Bereich ausführen, verwenden Sie einfach keinen Bereich wie diesen :: git log HEAD --oneline -1> 82c12a9 (HEAD, origin/remote-branch-name, origin/master, origin/dev, origin/HEAD, master, dev) commit message.
Devin G Rhode
Wenn dieses Git-Repo ein Submodul ist und Sie versuchen, das Problem mit dem losgelösten HEAD zu lösen ... dann haben Sie eine schwierige Frage nach einem bevorzugten Zweig ... In meinem vorherigen Beispiel könnte man leicht sagen, dass dies masterimmer bevorzugt wird, wenn es in dieser Liste enthalten ist . Von dort ist es weniger klar. Sie können versuchen, den Git-Zweig aus der .gitmodules-Datei zu lesen : git config -f .gitmodules submodule.src/foo/submodule.branch. Dies könnte eine langjährige Gabel / PR sein. Sie können cd, um root zu repo und ausführen git config submodule.src/foo/submodule.branch. Sie können auch den aktuellen Git-Zweig von Superprojekten verwenden.
Devin G Rhode
git config submodule.src/foo/submodule.branchNebenbei bemerkt : Kann durch eine Vielzahl von Git-Konfigurationen beeinflusst werden, einschließlich einer repo-lokalen .gitconfig-Datei. (erfordert Laufen git config --local include.path ./path/to/your/.gitconfig)
Devin G Rhode