Git: Wie finde ich heraus, auf welchem ​​Zweig sich ein Tag befindet?

84

Ich bin derzeit mit einem Projekt mit vielen Zweigen beschäftigt und habe ein Tag für die letzten Änderungen, die in einem der Zweige vorgenommen wurden. Aber es ist mir nicht klar, auf welchem ​​Zweig sich dieses Tag befindet.

Wie finde ich heraus, auf welchem ​​Zweig sich ein Tag befindet?

Viacheslav Kondratiuk
quelle

Antworten:

118

Noch kürzer:

git branch --contains tags/<tag>

(Es funktioniert für jede baumartige Referenz)


Wenn Sie herausfinden können, auf welches Commit sich ein Tag bezieht :

 git rev-parse --verify tags/<tag>^{commit}
 # or, shorter:
 git rev-parse tags/<tag>~0

Dann können Sie herausfinden, welcher Zweig dieses Commit enthält .

git branch --contains <commit>

Wie unten von user3356885 kommentiert , für die abgerufenen Zweige (Zweige im Remote-Namespace)

git branch -a --contains tags/<tag>
git branch -a --contains <commit>
VonC
quelle
6
Auf meiner Version von Git, 1.7.1, kann ich das einfach tun git branch --contains <tag>.
Dan Moulding
@DanMoulding true, ich habe die Antwort bearbeitet, um dies widerzuspiegeln. Ich war anfangs daran interessiert, das mit einem Tag verknüpfte Commit zu finden.
VonC
6
Wenn Sie nach einem Tag suchen, das in einem Remote-Zweig erstellt wurde, werden in diesem Fall keine Ergebnisse erzielt. Mit anderen Worten, für Zweige, die lokal nicht vorhanden sind, werden keine Ergebnisse erzielt. Option -a sollte dafür verwendet werden. git branch -a --contains <tag>. Gleiches gilt für Commits.
user3356885
1
Leider gibt dies mehrere Dinge zurück: * (HEAD bei 82dd3f0 getrennt) master refs / tags / 0.0.1-test-masterBr -> Ich möchte programmgesteuert auf den Zweig zugreifen, keine HEAD-Informationen oder das Tag selbst
herm
@herm In diesem Fall versuchen Siegit branch --no-merge tags/<a-tag>
VonC
30

Wenn "git branch --contains" nichts bewirkt, stellen Sie sicher, dass Sie alle Zweige einschließen, sowohl entfernte als auch lokale Zweige:

git branch -a --contains <tag>

Von der Git-Hilfe:

Spezifische Git-Branch-Aktionen: -a, --all listet sowohl Remote-Tracking- als auch lokale Zweige auf

david1977
quelle
5
git branch --contains tag

tut nichts für mich, aber ich habe meine Lösung für dieses Problem in Git GUI gefunden .

Starten Sie es so:

git gui

(Auf meinem Ubuntu musste ich es zuerst mit installieren sudo apt-get install git-gui.)

Dann habe ich den Menüpunkt Repository -> Alle Zweigverläufe visualisieren ausgewählt . Im daraufhin angezeigten Fenster habe ich dann den Menüpunkt Datei -> Referenzen auflisten ausgewählt .

Ein weiteres Fenster öffnete sich und listete alle meine Tags (und andere Referenzen) auf. Diese sind anklickbar und nachdem ich auf einen von ihnen geklickt habe, musste ich nur den unteren linken Rahmen auf die Liste der Zweige überprüfen. So was:

Parent: somesha (message)
Parent: someothersha (another message)
Child:  anothersha (yet another message)
Branches: branch1, master, remotes/origin/branch2, remotes/upstream/branch1, etc
Follows: v1.1.2
Precedes: v1.1.4
Peter Jaric
quelle
3

In Bezug auf den Kommentar von @ VonC zum Auffinden des Commits, auf das durch ein Tag verwiesen wird, verwenden Sie einfach:

git show <tag>

Da ein Tag an ein bestimmtes Commit gebunden ist, kann es verwendet werden, um dieses Commit anzuzeigen. Dadurch erhalten Sie die vollständigen Commit-Details.

arpieb
quelle
0

Mit einem Tag markieren Sie eine Referenz. Wenn Sie sich also in einem Entwicklungszweig befinden und diesen Status markieren. Ihr Tag befindet sich auf der tatsächlichen Referenz. In diesem Fall können Sie also nach gitk oder einem anderen Tool suchen, in dem der Baum angezeigt wird. Dort können Sie sehen, auf welcher Referenz sich das Tag befindet.

git: Gibt es so etwas wie Tags pro Zweig?
http://git-scm.com/book/en/Git-Basics-Tagging

Hier ist eine gute Erklärung.

René Höhle
quelle
0

Ein Tag bezieht sich immer auf die Festschreibungsnummer. Mit dieser Tag-Nummer können Sie den Zweig finden, von dem aus das Tag platziert wurde.

git for-each-ref | grep ${commit_num} | grep origin | sed "s/.*\///"
ttfreeman
quelle
0

Sie können dies auch versuchen, hatten einen ähnlichen Anwendungsfall und dies funktionierte für mich

git ls-remote --heads origin | grep $CI_COMMIT_SHORT_SHA  | sed "s/.*\///"

Etwas anders, aber inspiriert von @ ttfreemans Antwort

Swags
quelle
-1

git reflog --date = local | grep feature_xxx

Laufen
quelle
3
Ich bezweifle, dass dies hilft - oder überhaupt funktioniert. Um mich davon zu überzeugen, fügen Sie bitte eine Erklärung hinzu, wie dies funktioniert und warum es helfen soll.
Yunnosch