1316 Stimmen

Wie kann man Zweige auflisten, die einen bestimmten Commit enthalten?

Wie kann ich Git abfragen, um herauszufinden, welche Zweige einen bestimmten Commit enthalten? gitk listet normalerweise die Zweige auf, es sei denn, es sind zu viele, dann heißt es nur "viele (38)" oder so ähnlich. Ich muss die vollständige Liste kennen oder zumindest wissen, ob bestimmte Zweige die Übergabe enthalten.

1760voto

VonC Punkte 1117238

Von der git-branch Handbuchseite :

 git branch --contains <commit>

Listet nur Zweige auf, die den angegebenen Commit enthalten (HEAD, wenn nicht angegeben). Impliziert --list .


 git branch -r --contains <commit>

Verzeichnisse Zweigstellen mit Fernüberwachung auch (wie erwähnt in Benutzer3941992 's Antwort unten), d. h. "lokale Zweigstellen, die eine direkte Beziehung zu einer entfernten Zweigstelle haben".


Comme notiert von Carl Walsh gilt dies nur für die Standard-Spezifikation

fetch = +refs/heads/*:refs/remotes/origin/*

Wenn Sie einen anderen ref-Namensraum einschließen müssen ( Pull-Anfrage , Gerrit , ...), müssen Sie diese neue refspec hinzufügen und erneut abrufen:

git config --add remote.origin.fetch "+refs/pull/*/head:refs/remotes/origin/pr/*"
git fetch
git branch -r --contains <commit>

Siehe auch dies bereit Artikel.

El --contains Tag wird herausfinden, ob ein bestimmter Commit bereits in Ihren Zweig eingebracht wurde. Vielleicht haben Sie einen Commit SHA von einem Patch, von dem Sie dachten, Sie hätten ihn angewendet, oder Sie wollen einfach nur überprüfen, ob der Commit für Ihr Lieblings-Open-Source-Projekt, der die Speichernutzung um 75% reduziert, schon drin ist.

$ 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

Nota: wenn die Übergabe auf einer Zweigstelle für Fernüberwachung fügen Sie die -a Option .
(als MichielB Kommentare unter )

git branch -a --contains <commit>

MatrixFrog merkt an, dass nur angezeigt wird, in welchen Zweigen die genau verpflichten.
Wenn Sie wissen wollen, welche Zweige einen "äquivalenten" Commit enthalten (d.h. welche Zweige diesen Commit "gepickt" haben), ist das git cherry :

Denn git cherry vergleicht den Changeset und nicht die Commit-ID (sha1) können Sie verwenden git cherry um herauszufinden, ob eine von Ihnen lokal vorgenommene Übertragung durchgeführt wurde <upstream> unter einer anderen Commit-ID.
Dies ist zum Beispiel der Fall, wenn Sie Patches füttern <upstream> per E-Mail, anstatt Commits direkt zu pushen oder zu ziehen.

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

(Hier sind die Commits mit ' - ' würde nicht auftauchen bei git cherry d.h. sie sind bereits vorhanden in <upstream> .)

31voto

Eugen Konkov Punkte 18206

Sie dürfen laufen:

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

Aus dem Kommentar der letzten Übergabe in der Ausgabe können Sie entnehmen ursprüngliche Niederlassung Name

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

4voto

Carl Walsh Punkte 5111

Die Antwort für git branch -r --contains <commit> funktioniert gut für normale entfernte Zweige, aber wenn die Übergabe nur im versteckten head Namespace, der GitHub erstellt für PRs benötigen Sie ein paar weitere Schritte.

Angenommen, PR #42 stammt aus einem gelöschten Zweig und dieser PR-Thread ist der einzige Verweis auf die Übergabe im Projektarchiv, git branch -r weiß nichts von PR #42, weil Schiedsrichter wie refs/pull/42/head sind standardmäßig nicht als entfernter Zweig aufgeführt.

Unter .git/config für die [remote "origin"] Abschnitt eine neue Zeile hinzufügen:

fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

( Dieser Kernpunkt hat mehr Kontext).

Wenn Sie dann git fetch erhalten Sie alle PR-Zweige, und wenn Sie die git branch -r --contains <commit> Sie werden sehen origin/pr/42 enthält die Übergabe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X