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.
Antworten
Zu viele Anzeigen?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 verwendengit 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>
.)
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
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.