如何在Git中还原为特定标签?


85

我知道如何在Git分支中还原为较早的提交,但是如何还原为标记指示的分支状态?我设想这样的事情:

git revert -bytag "Version 1.0 Revision 1.5"

这可能吗?


您是否要“倒回分支”(即删除提交),或向当前分支添加新的提交,以设置分支,以便所有文件都是“它们在该标记所给定的提交方式”?
torek

尽管我想我宁愿按照您描述的方式向当前分支添加新的提交,也应该完成工作
zachd1_618 2013年

在这种情况下,请使用此答案中git checkout <id> .方法。
torek

Answers:


130

Git标签只是指向提交的指针。因此,您使用它们的方式与处理HEAD,分支名称或提交sha散列的方式相同。您可以在任何接受提交/修订参数的git命令中使用标签。您可以尝试使用它git rev-parse tagname来显示它指向的提交。

就您而言,您至少有以下两种选择:

  1. 将当前分支重置为特定标签:

    git reset --hard tagname
    
  2. 在顶部生成还原提交,以使您进入标记状态:

    git revert tag
    

如果您有合并提交,这可能会带来一些冲突。


28
我认为“ git revert <tag>”还原已标记提交中的更改,而不是将工作副本还原到该版本。
马特

要也摆脱未跟踪/未版本控制的文件,请遵循stackoverflow.com/a/912737/923560
Abdull

3
就像@Matt所说的那样,被接受的答案是不正确的,因为它只还原标记的提交中的更改。最好的选择是使用提交哈希,并遵循以下答案:stackoverflow.com/a/4114122/6348485
Swagga Ting

嗨,您能解释一下“生成顶部的还原提交以使您进入标记状态:”吗?我不知道这意味着什么。
John Little

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>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.