Git: Jak się dowiedzieć, na której gałęzi znajduje się tag?

87

Obecnie jestem zajęty projektem z wieloma gałęziami i mam tag dla ostatnich zmian, które zostały zrobione na jednej z gałęzi. Ale nie jest dla mnie jasne, na której gałęzi znajduje się ten tag.

Jak dowiedzieć się, na której gałęzi znajduje się tag?

Viacheslav Kondratiuk
źródło

Odpowiedzi:

121

Jeszcze krócej:

git branch --contains tags/<tag>

(działa dla każdego odwołania do drzewa)


Jeśli możesz znaleźć zatwierdzenie, do którego odnosi się tag :

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

Następnie możesz znaleźć gałąź zawierającą to zatwierdzenie .

git branch --contains <commit>

Jak skomentował poniżej user3356885 , dla pobranych gałęzi (gałęzi w przestrzeni nazw pilotów)

git branch -a --contains tags/<tag>
git branch -a --contains <commit>
VonC
źródło
6
W mojej wersji Gita 1.7.1 mogę po prostu to zrobić git branch --contains <tag>.
Dan Molding
@DanMoulding true, zredagowałem odpowiedź, aby to odzwierciedlić. Początkowo byłem zainteresowany znalezieniem zatwierdzenia dołączonego do tagu.
VonC
6
Poszukiwanie tagu, który został utworzony w zdalnym oddziale nie przyniesie w tym przypadku żadnych rezultatów. Innymi słowy, żadne wyniki nie zostaną uzyskane dla gałęzi, które nie istnieją lokalnie. W tym celu należy użyć opcji -a . git branch -a --contains <tag>. To samo zadziała w przypadku zatwierdzeń.
user3356885
1
Niestety zwraca to wiele rzeczy: * (HEAD odłączony w 82dd3f0) master refs / tags / 0.0.1-test-masterBr -> Chcę programowo uzyskać dostęp do gałęzi, bez informacji HEAD lub samego tagu
herm
1
git branch --contains <tag>. git wersja 2.23.0, zsh, open SUSE tumbleweed. Nie sądzę, aby to było specyficzne dla mojego systemu operacyjnego lub powłoki, myślę, że jest to domyślna rzecz, którą robią nowoczesne wersje git. Otwierają listę na pagerze
redanimalwar
30

Jeśli „git branch --contains” nic nie robi, upewnij się, że uwzględniasz wszystkie gałęzie, zarówno zdalne, jak i lokalne:

git branch -a --contains <tag>

Z pomocy git:

Konkretne akcje git-branch: -a, --all wyświetla zarówno zdalne śledzenie, jak i oddziały lokalne

david1977
źródło
5
git branch --contains tag

nic nie robi dla mnie, ale znalazłem rozwiązanie tego problemu w git gui .

Zacznij to tak:

git gui

(Na moim Ubuntu musiałem go najpierw zainstalować sudo apt-get install git-gui.)

Następnie wybrałem pozycję menu Repozytorium -> Wizualizuj całą historię gałęzi . W wyświetlonym oknie wybrałem następnie pozycję menu Plik -> Lista referencji .

Pojawiło się kolejne okno z listą wszystkich moich tagów (i innych odniesień). Są one klikalne i po kliknięciu jednego z nich po prostu musiałem sprawdzić listę oddziałów w lewej dolnej ramce. Lubię to:

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
źródło
4

Jeśli chodzi o komentarz @ VonC dotyczący znalezienia zatwierdzenia, do którego odwołuje się tag, użyj po prostu:

git show <tag>

Ponieważ znacznik jest powiązany z konkretnym zatwierdzeniem, można go użyć do pokazania tego zatwierdzenia - co da ci pełne szczegóły zatwierdzenia.

arpieb
źródło
0

Znacznik zawsze odnosi się do numeru zatwierdzenia. Używając tego numeru tagu, możesz znaleźć gałąź, z której został umieszczony tag:

git for-each-ref | grep ${commit_num} | grep origin | sed "s/.*\///"
ttfreeman
źródło
0

Możesz także spróbować tego, miał podobny przypadek użycia i to zadziałało dla mnie

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

Nieco inaczej, ale czerpiąc inspirację z odpowiedzi @ ttfreeman

Swags
źródło