我知道如何在Git分支中恢复到旧的提交版本,但是如何回滚到由标签指定的分支状态呢? 我想象中应该是这样的:
git revert -bytag "Version 1.0 Revision 1.5"
这是可能的吗?
Git标签只是指向提交记录的指针。因此,您可以像使用HEAD、分支名称或提交sha散列值一样使用它们。您可以在接受提交/修订参数的任何git命令中使用标签。您可以尝试使用git rev-parse tagname
显示其指向的提交记录。
在您的情况下,您至少有以下两个选择:
将当前分支重置为特定标签:
git reset --hard tagname
在顶部生成还原提交以使您回到标签的状态:
git revert tag
如果您有合并提交,这可能会导致一些冲突。
如果您:
reset to a tag named reset-to-here
git reset --hard reset-to-here
push your change to the remote forcing by +
git push origin +master
您可以使用git checkout命令。
我尝试了已接受的解决方案,但是遇到了一个错误:warning: refname '<tagname>' is ambiguous'
如答案所述,标签确实像指向提交的指针,因此您可以像使用提交哈希一样,只需检出标签即可。唯一的区别是您需要在其前面加上tags/
:
git checkout tags/<tagname>
我已经寻找解决这个问题的方法很长时间了。经过大量研究,我可以说目前没有解决这个问题的方法:
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
git checkout <id> .
方法。 - torek