Git如何取消还原操作

57
在Git中,假设我提交了A和B。
A---[B]

但是我随后进行了还原

git revert HEAD

所以现在我在这里:

[A]---B

如何取消撤销,以便我可以返回到B?


我不确定Git中“revert”一词的用法,但通常,“revert”意味着覆盖所有本地更改。因此,只有一个undelete工具才能有所帮助,但机会很小。 - Andreas
2
@Andreas:在Git中,“还原”是一个新的提交,它撤销了早期提交的某些应用。 - Greg Hewgill
2
你的图片不准确。回滚后,你会得到 A---B---!B,其中 !B 是撤销 B 的提交。Greg 的两个答案分别创建了一个撤销 !B 的提交 !!B 或将你返回到 B - Cascabel
"git reset --hard REF",将“REF”替换为您想要返回的引用或SHA。http://sethrobertson.github.io/GitFixUm/fixup.html - phoad
4个回答

95

您有两个一般的选择:

  • 还原撤销提交(创建第二个撤销提交,将您带回原始状态)
  • 使用

git reset --hard HEAD^

放弃撤销提交是第二个选项,只适用于您没有在其他地方推送自己的更改。事实上,如果您尚未在任何地方推送第一个撤销提交,则可以使用

git reset --hard

回滚而不创建任何撤销提交。


10
不要像我一样使用 --hard 重置,我在仓库中丢失了所有的外来文件! - Benoît
3
也许先建议使用 git stash - ScottyBlades

24

如果你还没有完全完成它,即在gitbash中你看到类似以下内容:

Username@Host MINGW64 /d/code/your-project (feature|REVERTING)

如果你想中止,可以使用 git revert --abort 命令来终止操作。

如果你已经执行了操作但不想重置,那么更改仍然存在。你可以使用 git reset 命令来改变状态。相比于 --hard,你也可以使用 --soft(保留所有更改)。

git reset --soft HEAD^ // discard the last commit, keeping all the changes after that

此外,如果您想要撤销多个提交:
git reset --soft HEAD~3 // discart last 3 commits. Don't know if it works for commits of others.

2
谢谢,我正在寻找“--abort”选项。 - Michael A. Schaffrath
1
我必须在两次git reset --hard之间执行git revert --abort,因为第一次报错了。 - Penghe Geng
对于这个案例,您的答案更快、更安全和更有文档性。谢谢! - undefined

3
当你创建一个撤销另一个提交的新提交时,你可以像处理普通提交一样处理它。
基本上,你有很多选择,例如:
- 使用 "git rebase -i"(删除撤消提交)。 - 使用 "git reset --hard< commitID>"(重置为撤消之前的提交,你将失去所有本地更改)。 - 使用 "git reset --soft< commitID>"(与上述相同,但保留本地更改)。 - 技术上你可以使用 "git revert" 撤销撤消。

0
你可以做的是“挑选”原始提交并再次推送。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接