我知道如何恢复到Git分支中较早的提交,但如何恢复到由标记指定的分支状态?我设想的是这样的:
git revert -bytag "Version 1.0 Revision 1.5"
这可能吗?
6yjfywim1#
Git标签只是指向提交的指针。因此,您使用它们的方式与您使用HEAD、分支名称或提交sha散列相同。你可以在任何接受commit/revision参数的git命令中使用标签。您可以尝试使用git rev-parse tagname来显示它所指向的提交。在您的情况下,您至少有以下两种选择:1.将当前分支重置为特定标记:
git rev-parse tagname
git reset --hard tagname
1.在顶部生成revert commit,以使您进入标记的状态:
git revert tag
如果您有合并提交,这可能会引入一些冲突。
cmssoen22#
使用git reset:
git reset --hard "Version 1.0 Revision 1.5"
(假设指定的字符串是标记)。
vngu2lb83#
你可以使用git checkout。我尝试了公认的解决方案,但得到了一个错误,warning: refname '<tagname>' is ambiguous'但是正如答案所述,标签的行为就像一个指向提交的指针,所以就像你使用提交哈希一样,你可以只 checkout 标签。唯一的区别是你用tags/开头:git checkout tags/<tagname>
warning: refname '<tagname>' is ambiguous'
tags/
git checkout tags/<tagname>
wh6knrhe4#
如果您是:
1.重置为名为reset-to-here的标记
reset-to-here
git reset --hard reset-to-here
1.通过+将更改推送到远程强制
+
git push origin +master
vpfxa7rd5#
我一直在寻找这个问题的解决方案很长一段时间。经过大量的研究,我可以说,没有一个解决这个问题的办法:
git reset --hard <tagname>
git revert <tagname>
git revert <hash1>..<hash2>
git rebase
git cherry-pick
所以这是唯一对我有效的方法:
git checkout <tag name> mkdir ../tmp cp -r . ../tmp git checkout master cp -rf ../tmp/* . rm -rf ../tmp git commit -m "Revert" git push
5条答案
按热度按时间6yjfywim1#
Git标签只是指向提交的指针。因此,您使用它们的方式与您使用HEAD、分支名称或提交sha散列相同。你可以在任何接受commit/revision参数的git命令中使用标签。您可以尝试使用
git rev-parse tagname
来显示它所指向的提交。在您的情况下,您至少有以下两种选择:
1.将当前分支重置为特定标记:
1.在顶部生成revert commit,以使您进入标记的状态:
如果您有合并提交,这可能会引入一些冲突。
cmssoen22#
使用git reset:
(假设指定的字符串是标记)。
vngu2lb83#
你可以使用git checkout。
我尝试了公认的解决方案,但得到了一个错误,
warning: refname '<tagname>' is ambiguous'
但是正如答案所述,标签的行为就像一个指向提交的指针,所以就像你使用提交哈希一样,你可以只 checkout 标签。唯一的区别是你用
tags/
开头:git checkout tags/<tagname>
wh6knrhe4#
如果您是:
1.重置为名为
reset-to-here
的标记1.通过
+
将更改推送到远程强制vpfxa7rd5#
我一直在寻找这个问题的解决方案很长一段时间。经过大量的研究,我可以说,没有一个解决这个问题的办法:
git reset --hard <tagname>
将更改历史记录。这不是还原git revert <tagname>
将只应用该特定提交的更改git revert <hash1>..<hash2>
将无法工作。而且即使您可以指定父级,如果有几个合并,这个操作也可能很繁琐。我们还必须考虑到,如果我们不想破坏我们的分支,那么每一个还原都必须经过明智的选择和测试。git rebase
和git cherry-pick
有同样的问题。所以这是唯一对我有效的方法: