你如何恢复到 Git 中的特定标签?

Posted

技术标签:

【中文标题】你如何恢复到 Git 中的特定标签?【英文标题】:How do you revert to a specific tag in Git? 【发布时间】:2013-08-23 02:21:34 【问题描述】:

我知道如何在 Git 分支中恢复到较旧的提交,但是如何恢复到由标签指示的分支状态?我设想这样的事情:

git revert -bytag "Version 1.0 Revision 1.5"

这可能吗?

【问题讨论】:

你想“倒回分支”(即,remove 提交),还是添加一个 new 提交到当前分支,设置向上分支,以便所有文件都是“它们在该标签给出的提交时的方式”? 两者都应该完成工作,但我想我宁愿按照你描述的方式向当前分支添加一个新的提交 在这种情况下,使用来自this answer 的git checkout <id> . 方法。 【参考方案1】:

Git 标签只是指向提交的指针。因此,您可以像使用 HEAD、分支名称或提交 sha 哈希一样使用它们。您可以将标签与任何接受提交/修订参数的 git 命令一起使用。您可以尝试使用 git rev-parse tagname 来显示它指向的提交。

在您的情况下,您至少有以下两种选择:

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

    git reset --hard tagname
    

    在顶部生成还原提交以使您进入标记状态:

    git revert tag
    

如果你有合并提交,这可能会引入一些冲突。

【讨论】:

我认为“git revert ”会还原标记提交中的更改,而不是将您的工作副本恢复到该版本。 要摆脱未跟踪/未版本控制的文件,请关注***.com/a/912737/923560 就像@Matt 所说,接受的答案是不正确的,因为它只会恢复标记提交中的更改。你最好的选择是使用提交哈希,并遵循这个答案:***.com/a/4114122/6348485 嗨,您能解释一下“在顶部生成还原提交以使您进入标签状态:”吗?不幸的是,我不知道这意味着什么。【参考方案2】:

使用git reset:

git reset --hard "Version 1.0 Revision 1.5"

(假设指定的字符串是标签)。

【讨论】:

【参考方案3】:

你可以使用 git checkout。

我尝试了接受的解决方案,但出现错误,warning: refname '<tagname>' is ambiguous'

但正如答案所述,标签的行为就像指向提交的指针,因此就像使用提交哈希一样,您只需签出标签即可。唯一的区别是你在前面加上tags/

git checkout tags/<tagname>

【讨论】:

【参考方案4】:

如果你是:

确定要返回哪个提交 之后删除所有提交 将更改应用到您的遥控器

    重置为名为@9​​87654321@的标签

    git reset --hard reset-to-here
    

    通过+将您的更改推送到远程强制

    git push origin +master
    

【讨论】:

以上是关于你如何恢复到 Git 中的特定标签?的主要内容,如果未能解决你的问题,请参考以下文章

恢复到 Git 中的特定提交 [重复]

如何将我的 git 分支恢复到指定的提交?

你如何让 git 总是从特定的分支中提取?

误删除服务器上的git项目,教你如何利用本地git恢复(gitlab)

git如何恢复本地删除的文件

你如何恢复错误的 git 合并提交