Я знаю, как вернуться к более старым коммитам в ветке Git, но как мне вернуться к состоянию ветки, продиктованному тегом? Я представляю себе что-то вроде этого:
Вы хотите «перемотать ветку назад» (т.е. удалить коммиты) или добавить новую фиксацию в текущую ветку, которая настраивает ветку так, чтобы все файлы были «такими, какими они были при фиксации, заданной этим тегом»?
torek
Любой из них должен выполнить свою работу, хотя я думаю, что я бы предпочел добавить новый коммит в текущую ветку так, как вы описываете
zachd1_618
В этом случае используйте git checkout <id> .метод из этого ответа .
torek
Ответы:
133
Теги Git - это просто указатели на фиксацию. Таким образом, вы используете их так же, как HEAD, имена веток или фиксируете хеши sha. Вы можете использовать теги с любой командой git, которая принимает аргументы фиксации / исправления. Вы можете попробовать его, git rev-parse tagnameчтобы отобразить фиксацию, на которую он указывает.
В вашем случае у вас есть как минимум две альтернативы:
Сбросить текущую ветку на определенный тег:
git reset --hard tagname
Сгенерируйте фиксацию отката вверху, чтобы перейти к состоянию тега:
git revert tag
Это может вызвать некоторые конфликты, если у вас есть коммиты слияния.
Как сказал @Matt, принятый ответ просто неверен, поскольку он отменяет только изменения в помеченном коммите. Лучше всего использовать хэши фиксации и следовать этому ответу: stackoverflow.com/a/4114122/6348485
Swagga Ting,
Привет, не могли бы вы объяснить «сгенерировать откат фиксации сверху, чтобы перейти в состояние тега:»? К сожалению, я понятия не имею, что это значит.
Я попробовал принятое решение, но получил ошибку, warning: refname '<tagname>' is ambiguous'
Но, как говорится в ответе, теги ведут себя как указатель на фиксацию, поэтому, как и в случае с хешем фиксации, вы можете просто проверить тег. Единственная разница в том, что вы начинаете его следующим образом tags/:
git checkout <id> .
метод из этого ответа .Ответы:
Теги Git - это просто указатели на фиксацию. Таким образом, вы используете их так же, как HEAD, имена веток или фиксируете хеши sha. Вы можете использовать теги с любой командой git, которая принимает аргументы фиксации / исправления. Вы можете попробовать его,
git rev-parse tagname
чтобы отобразить фиксацию, на которую он указывает.В вашем случае у вас есть как минимум две альтернативы:
Сбросить текущую ветку на определенный тег:
Сгенерируйте фиксацию отката вверху, чтобы перейти к состоянию тега:
Это может вызвать некоторые конфликты, если у вас есть коммиты слияния.
источник
Используйте git reset :
(при условии, что указанная строка является тегом).
источник
Вы можете использовать git checkout.
Я попробовал принятое решение, но получил ошибку,
warning: refname '<tagname>' is ambiguous'
Но, как говорится в ответе, теги ведут себя как указатель на фиксацию, поэтому, как и в случае с хешем фиксации, вы можете просто проверить тег. Единственная разница в том, что вы начинаете его следующим образом
tags/
:git checkout tags/<tagname>
источник