Git: Як дізнатись, на якій гілці знаходиться тег?


84

В даний час я зайнятий проектом з великою кількістю гілок, і у мене є тег для останніх змін, який було зроблено на одній з гілок. Але мені незрозуміло, на якій гілці знаходиться цей тег.

Як дізнатися, на якій гілці знаходиться тег?

Відповіді:


118

Ще коротше:

git branch --contains tags/<tag>

(це працює для будь-яких деревних посилань)


Якщо ви можете знайти, до якого коміту посилається тег :

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

Тоді ви можете знайти, яка гілка містить цей коміт .

git branch --contains <commit>

Як відзначили знизу user3356885 , для витягнутих гілок (гілки в просторі імен пультів)

git branch -a --contains tags/<tag>
git branch -a --contains <commit>

6
У моїй версії Git, 1.7.1, я просто можу це зробити git branch --contains <tag>.
Dan Molding

@DanMoulding true, я відредагував відповідь, щоб це відобразити. Спочатку я був зацікавлений знайти коміт, прикріплений до тегу.
VonC

6
Пошук тегу, створеного на віддаленій гілці, у цьому випадку не дасть результатів. Іншими словами, жодних результатів для філій, які не існують на місцях, не буде. Для цього слід використовувати варіант -a . git branch -a --contains <tag>. Те саме буде працювати для комітів.
user3356885

1
На жаль, це повертає декілька речей: * (HEAD від'єднано на 82dd3f0) master refs / tags / 0.0.1-test-masterBr -> Я хочу програмно отримувати доступ до гілки, без інформації про HEAD чи самого тегу
herm

@herm У такому випадку спробуйтеgit branch --no-merge tags/<a-tag>
VonC

30

Якщо "git branch --contains" нічого не робить, переконайтеся, що ви включаєте всі гілки, як віддалені, так і локальні гілки:

git branch -a --contains <tag>

З довідки git:

Конкретні дії git-branch: -a, --всі перелічують як віддалене відстеження, так і локальні гілки


5
git branch --contains tag

для мене нічого не робить, але я знайшов своє рішення цієї проблеми в git gui .

Почніть так:

git gui

(На моєму Ubuntu мені довелося встановити його спочатку sudo apt-get install git-gui.)

Потім я вибрав пункт меню Репозиторій -> Візуалізувати всю історію філій . Потім у вікні, що вийшло, я вибрав пункт меню Файл -> Список посилань .

Вискочило ще одне вікно, де були перелічені всі мої теги (та інші посилання). Вони доступні для натискання, і після натискання однієї з них мені просто потрібно було перевірити нижній лівий кадр для списку гілок. Подобається це:

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

3

Стосовно коментаря @ VonC щодо пошуку коміту, на який посилається тег, просто використовуйте:

git show <tag>

Оскільки тег прив'язаний до конкретного коміту, його можна використовувати для показу цього коміту - який надасть вам усі деталі коміту.


0

Тегом ви позначаєте посилання. Отже, коли ви перебуваєте у гілці розробника та позначаєте цей стан. Ваш тег вказаний на справжньому посиланні. Тож у цьому випадку ви можете шукати gitk або іншого інструменту, де показано дерево. Там ви можете побачити, на якому посиланні знаходиться тег.

git: Чи є щось на зразок тегів по гілках?
http://git-scm.com/book/en/Git-Basics-Tagging

Ось гарне пояснення.


0

Тег завжди відноситься до номера коміту. За допомогою цього номера тегу ви можете знайти гілку, з якої розміщено тег, використовуючи це:

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

0

Ви також можете спробувати це, мав подібний варіант використання, і це спрацювало для мене

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

Трохи інакше, але черпаючи натхнення з відповіді @ ttfreeman


-1

git reflog --date = local | grep feature_xxx


3
Я сумніваюся, що це допомагає - або взагалі працює. Щоб переконати мене в протилежному, додайте пояснення того, як це працює і чому це має допомогти.
Юннош
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.