Як повернутися до певного тегу в Git?


85

Я знаю, як повернутися до старих комітів у гілці Git, але як повернутися до стану гілки, продиктованого тегом? Я передбачаю щось подібне:

git revert -bytag "Version 1.0 Revision 1.5"

Чи можливо це?


Ви хочете "перемотати гілку" (тобто видалити коміти) або додати нову фіксацію до поточної гілки, яка налаштовує гілку так, щоб усі файли були "такими, якими вони були при фіксації, заданими цим тегом"?
Торек

Будь-який з них повинен виконати роботу, хоча, я думаю, я волів би додати новий
коміт

У такому випадку скористайтеся git checkout <id> .методом із цієї відповіді .
torek

Відповіді:


130

Теги Git - це лише вказівники на коміт. Таким чином, ви використовуєте їх так само, як і HEAD, імена гілок або фіксуєте хеші sha. Ви можете використовувати теги з будь-якою командою git, яка приймає аргументи коміту / редагування. Ви можете спробувати, git rev-parse tagnameщоб відобразити коміт, на який вказує.

У вашому випадку у вас є принаймні ці дві альтернативи:

  1. Скиньте поточну гілку до певного тегу:

    git reset --hard tagname
    
  2. Згенеруйте повернення коміту зверху, щоб перейти до стану тегу:

    git revert tag
    

Це може спричинити деякі конфлікти, якщо у вас є коміти злиття.


28
Я думаю, що "git revert <tag>" повертає зміни у позначеному коміті замість того, щоб відновити вашу робочу копію до цієї версії.
Matt

Для того, щоб також позбутися від неотслежіваемих / неверсірованное файлів, виконайте stackoverflow.com/a/912737/923560
Abdull

3
Як сказав @Matt, прийнята відповідь є просто неправильною, оскільки вона лише повертає зміни у позначеному коміті. Найкраще використовувати зробити хеш, і слідувати цій відповіді: stackoverflow.com/a/4114122/6348485
Swagga Ting

Привіт, не могли б ви пояснити "згенерувати коміт повернення, щоб перейти до стану тегу:"? Я поняття не маю, що це означає, на жаль.
Джон Літтл

12

Використовуйте git reset :

git reset --hard "Version 1.0 Revision 1.5"

(припускаючи, що вказаний рядок є тегом).


1

Ви можете використовувати git checkout.

Я спробував прийняте рішення, але отримав помилку, warning: refname '<tagname>' is ambiguous'

Але, як зазначено у відповіді, теги поводяться як вказівник на коміт, тому, як і з хешем коміту, ви можете просто перевірити тег. Єдина відмінність полягає в тому, що ви передмовляєте його до tags/:

git checkout tags/<tagname>

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