Чи застосовуються теги Git лише до поточної гілки?


156

Зараз я працюю з сховищем, яке має кілька відділень.

Коли я створюю тег, чи посилається цей тег на поточну гілку?

Іншими словами: Щоразу, коли я створюю тег, чи потрібно мені переходити до потрібної гілки та тегу всередині цієї гілки, щоб тег посилався на цю гілку в цей момент часу?

Відповіді:


151

Якщо ви створюєте тег, наприклад,

git tag v1.0

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

Ви також можете просто звернутися до іншої гілки під час позначення,

git tag v1.0 name_of_other_branch

який створить тег до останнього комітету іншої гілки.

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

git tag v1.0 <sha1>

201

Відповідь CharlesB в і відповідь helmbert в обидва корисні, але мені потрібно якийсь час , щоб зрозуміти їх. Ось ще один спосіб:

  • Тег є покажчиком на фіксації , і існують фіксації незалежно від гілок .
    • Важливо розуміти, що теги не мають прямого зв’язку з гілками - вони лише коли-небудь ідентифікують коміт .
      • Ця фіксація може бути вказана з будь-якої кількості гілок - тобто вона може бути частиною історії будь-якої кількості філій - включаючи жодну.
    • Таким чином, біг git show <tag>для перегляду деталей тегу не містить посилань на жодні гілки, лише ідентифікатор комісії, на який вказує тег.
      • (Commit ідентифікаторів (AKA імен об'єктів або SHA-1 ідентифікатори) є рядки 40-символів складаються з шістнадцяткових цифр, які хеш над вмістом Ком, наприклад :. 6f6b5997506d48fc6267b0b60c3f0261b6afe7a2)
  • Гілки грають лише побічно :
    • Під час створення тегу , маючи на увазі зобов’язання , на яке вказуватиме тег :
      • Не вказуючи ціль для тегу за замовчуванням до останньої філії поточної гілки (aka HEAD); наприклад:
        • 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НЕ може відображати останній створений тег загалом .

Отже, для заданого тегу (наприклад, v0.1.0), щоб знати, яке фактичне джерело є у фактичній збірці (цього джерела), вам дійсно потрібно знати, на якій гілці побудована збірка, правда? Тобто, дане зобов’язання може мати різних нащадків у різних галузях, правда?
Хокі Паркер

2
@HawkeyeParker: Я більше не занурююся в це, але вам не потрібно знати гілку, тому що тег ідентифікує конкретну комісію (яка може бути частиною декількох гілок), і ви можете досліджувати звідти.
mklement0

Але якщо я роблю git show [tagname], тоді він показує ім'я гілки вище Author and Date, що суперечить "run git show <tag>, щоб побачити деталі тегу, не містить посилань на жодні гілки"
Brad Thomas Thomas

39

Теги та гілка абсолютно не пов'язані між собою, оскільки теги посилаються на певну комісію, а гілка є зворотним посиланням на останнє фіксацію історії. Гілки йдуть, теги залишаються.

Тож, коли ви позначаєте команду, git не важливо, яку комісію чи гілку перевіряють, якщо ви надаєте йому SHA1 того, що ви хочете позначити.

Я навіть можу позначити тег, перейшовши на гілку (вона потім позначить кінчик гілки), а пізніше скажу, що підказка гілки знаходиться в іншому місці ( git reset --hardнаприклад,), або видалити гілку. Проте тег, який я створив, не переміститься.


17
Іншими словами, теги - це просто приємні назви для некрасивих хешей хет. Тег (і хеш) існує незалежно від того, які гілки існують (ed).
C-Otto

8

При виклику просто git tag <TAGNAME>без додаткових параметрів, Git створить новий тег з вашої поточної HEAD (тобто HEAD вашої поточної гілки). При додаванні додаткових комісій у цю гілку гілка HEAD буде йти в ногу з новими комісіями, тоді як тег завжди посилається на ту саму комісію.

Під час дзвінка git tag <TAGNAME> <COMMIT>ви навіть можете вказати, яку комісію використовувати для створення тегу.

Незважаючи на те, тег все ще просто є "покажчиком" на певний коміт (а не гілку).


6

Ми можемо створити тег для деяких минулих комісій:

git tag [tag_name] [reference_of_commit]

наприклад:

git tag v1.0 5fcdb03

1

Якщо ви хочете помітити тег гілки, в якій ви перебуваєте, введіть:

git tag <tag>

і натисніть на гілку за допомогою:

git push origin --tags

0

Якщо ви хочете створити тег із гілки, яка є щось на зразок release/yourbranchтощо. Тоді вам слід використовувати щось подібне

git tag YOUR_TAG_VERSION_OR_NAME origin/release/yourbranch

Після створення належного тегу, якщо ви хочете натиснути тег на віддалений, використовуйте команду

git push origin YOUR_TAG_VERSION_OR_NAME
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.