Как вернуться к определенному тегу в Git?

86

Я знаю, как вернуться к более старым коммитам в ветке Git, но как мне вернуться к состоянию ветки, продиктованному тегом? Я представляю себе что-то вроде этого:

git revert -bytag "Version 1.0 Revision 1.5"

Это возможно?

zachd1_618
источник
Вы хотите «перемотать ветку назад» (т.е. удалить коммиты) или добавить новую фиксацию в текущую ветку, которая настраивает ветку так, чтобы все файлы были «такими, какими они были при фиксации, заданной этим тегом»?
torek
Любой из них должен выполнить свою работу, хотя я думаю, что я бы предпочел добавить новый коммит в текущую ветку так, как вы описываете
zachd1_618
В этом случае используйте git checkout <id> .метод из этого ответа .
torek

Ответы:

133

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

В вашем случае у вас есть как минимум две альтернативы:

  1. Сбросить текущую ветку на определенный тег:

    git reset --hard tagname
    
  2. Сгенерируйте фиксацию отката вверху, чтобы перейти к состоянию тега:

    git revert tag
    

Это может вызвать некоторые конфликты, если у вас есть коммиты слияния.

юрглик
источник
30
Я думаю, что "git revert <tag>" отменяет изменения в помеченном коммите, вместо того, чтобы восстанавливать вашу рабочую копию до этой версии.
Мэтт
Чтобы также избавиться от неотслеживаемых / неверсированных файлов, следуйте stackoverflow.com/a/912737/923560
Абдул
3
Как сказал @Matt, принятый ответ просто неверен, поскольку он отменяет только изменения в помеченном коммите. Лучше всего использовать хэши фиксации и следовать этому ответу: stackoverflow.com/a/4114122/6348485
Swagga Ting,
Привет, не могли бы вы объяснить «сгенерировать откат фиксации сверху, чтобы перейти в состояние тега:»? К сожалению, я понятия не имею, что это значит.
Джон Литтл,
12

Используйте git reset :

git reset --hard "Version 1.0 Revision 1.5"

(при условии, что указанная строка является тегом).

Devnull
источник
1

Вы можете использовать git checkout.

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

Но, как говорится в ответе, теги ведут себя как указатель на фиксацию, поэтому, как и в случае с хешем фиксации, вы можете просто проверить тег. Единственная разница в том, что вы начинаете его следующим образом tags/:

git checkout tags/<tagname>

joshi123
источник