Теги ГИТ применяются только к текущей ветке?
в настоящее время я работаю с репозиторием, который имеет несколько ветвей.
когда я создаю тег, этот тег ссылается на тогдашнюю ветвь?
другими словами: всякий раз, когда я создаю тег, мне нужно переключиться на нужную ветвь и тег внутри этой ветви, чтобы тег ссылался на эту ветвь в этот момент времени?
5 ответов:
Если вы создаете тег, например,
git tag v1.0
тег будет ссылаться на самую последнюю фиксацию ветви, в которой вы находитесь в данный момент. Вы можете изменить ветку и создать тег там.
вы также можете просто обратиться к другой ветви, помечая,
git tag v1.0 name_of_other_branch
создать тэг для последнего коммита другой ветке.
или вы можете просто поместить тег в любом месте, независимо от того, какая ветвь, напрямую ссылаясь на SHA1 некоторых совершение
git tag v1.0 <sha1>
ответ Чарльза и ответ хельмберта и полезны, но мне потребовалось время, чтобы понять их. Вот еще один способ выразить это:
- A tag это указатель на коммит и коммиты существуют независимо от ветвей.
- важно понимать, что теги нет прямые связь с филиалами - они только когда-либо определить commit.
- на эту фиксацию можно указать из любого числа ветвей, т. е. она может быть частью истории любого числа ветвей, включая ни одну.
- таким образом, под управлением
git show <tag>
чтобы увидеть детали тега, не содержит ссылки на какие-либо ветви, только идентификатор фиксации, на которую указывает тег.
- (фиксация идентификаторов (это.к.а. имена объектов или SHA-1 ids) являются 40-символьных строк, состоящий из шестигранной. цифры, которые являются хэшами над содержимым фиксации; например:
6f6b5997506d48fc6267b0b60c3f0261b6afe7a2
)
- ветви вступают в игру только косвенно:
- во время создания тег, by подразумевая совершения что тег будет указывать:
- не указывая цель для тега по умолчанию для текущей ветви наиболее последние фиксации (а.к.а. Руководителя); например,:
git tag v0.1.0 # tags HEAD of *current* branch
- указание имени ветви в качестве целевого тега по умолчанию для последней фиксации этой ветви; например:
git tag v0.1.0 develop # tags HEAD of 'develop' branch
- (как отмечали другие, вы также можете явно указать идентификатор фиксации в качестве цели тега.)
- при использовании
git describe
для описания текущей ветви:
git describe [--tags]
описывает текущую ветвь с точки зрения коммитов с самого последнего [возможно, легкого] тега в истории этой отрасли.- таким образом, тег, на который ссылается
git describe
может не отражать последний созданный тег в целом.
теги и ветвь совершенно не связаны, так как теги ссылаются на конкретную фиксацию, а ветвь-это движущаяся ссылка на последнюю фиксацию истории. Ветки идут, метки остаются.
поэтому, когда вы помечаете фиксацию, git не заботится о том, какая фиксация или ветвь проверена, если вы предоставляете ему SHA1 того, что вы хотите пометить.
Я даже могу пометить, ссылаясь на ветку (затем он пометит кончик ветки), а позже скажет, что кончик ветки находится в другом месте (с
git reset --hard
например), или удалить ветку. Тег, который я создал, однако не будет двигаться.
при вызове просто
git tag <TAGNAME>
без каких-либо дополнительных параметров Git создаст новый тег из вашей текущей головы (т. е. головы вашей текущей ветви). При добавлении дополнительных коммитов в эту ветвь глава ветви будет идти в ногу с этими новыми коммитами, в то время как тег всегда ссылается на один и тот же коммит.при вызове
git tag <TAGNAME> <COMMIT>
вы даже можете указать, какой коммит использовать для создания тега.несмотря на это, тег по-прежнему является просто "указателем" на определенную фиксацию (не филиала).