Git: Как узнать, на какой ветке стоит тег?


86

В настоящее время я занят проектом с большим количеством ветвей, и у меня есть тег для последних изменений, которые были сделаны в одной из веток. Но мне непонятно, на какой ветке стоит этот тег.

Как узнать, на какой ветке стоит тег?

Ответы:


120

Еще короче:

git branch --contains tags/<tag>

(работает для любой древовидной ссылки)


Если вы можете найти, к какой фиксации относится тег :

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

Затем вы можете найти, какая ветка содержит этот коммит .

git branch --contains <commit>

Как прокомментировано ниже пользователем3356885 , для выбранных ветвей (ветки в пространстве имен удаленных )

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

6
В моей версии Git 1.7.1 я могу просто сделать git branch --contains <tag>.
Дэн Молдинг

@DanMoulding правда, я отредактировал ответ, чтобы отразить это. Изначально меня интересовало, как найти фиксацию, прикрепленную к тегу.
VonC

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

1
К сожалению, это возвращает несколько вещей: * (HEAD отсоединен от 82dd3f0) master refs / tags / 0.0.1-test-masterBr -> Я хочу программно получить доступ к ветке, без информации HEAD или самого тега
Гермы

1
git branch --contains <tag>. git версии 2.23.0, zsh, откройте SUSE перекати-поле. Я не думаю, что это специфично для моей ОС или оболочки, я думаю, что это стандартная вещь, которую делают современные версии git. Они открывают список в пейджере
redanimalwar

30

Если "git branch --contains" ничего не делает, убедитесь, что вы включаете все ветки, как удаленные, так и локальные:

git branch -a --contains <tag>

Из справки git:

Конкретные действия git-branch: -a, --all перечислить как удаленное отслеживание, так и локальные ветки


5
git branch --contains tag

ничего не делает для меня, но я нашел свое решение этой проблемы в git gui .

Начните так:

git gui

(На моем Ubuntu мне пришлось сначала установить его с sudo apt-get install git-gui .)

Затем я выбрал пункт меню Repository -> Visualize All Branch History . В появившемся окне я выбрал пункт меню File -> List References .

Появилось еще одно окно со списком всех моих тегов (и других ссылок). Они кликабельны, и после нажатия на одну из них мне просто нужно было проверить нижний левый фрейм на наличие списка веток. Как это:

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

4

Что касается комментария @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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.