协慌网

登录 贡献 社区

如何撤消'git reset'?

什么是最简单的撤消方法

git reset HEAD~

命令?目前,我能想到的唯一方法是从远程仓库进行 “git clone http:// ...”。

答案

简短回答:

git reset 'HEAD@{1}'

答案很长:

Git 记录所有 ref 更新(例如,checkout,reset,commit,merge)。您可以通过键入以下内容查看:

git reflog

此列表中的某个位置是您丢失的提交。假设您只是键入git reset HEAD~并想要撤消它。我的 reflog 看起来像这样:

$ git reflog
3f6db14 HEAD@{0}: HEAD~: updating HEAD
d27924e HEAD@{1}: checkout: moving from d27924e0fe16776f0d0f1ee2933a0334a4787b4c
[...]

第一行表示HEAD 0 位置前(换句话说,当前位置)是 3f6db14; 它是通过重置为HEAD~获得的。第二行表示HEAD 1 位置之前(换句话说,复位前的状态)是 d27924e。它是通过检查一个特定的提交获得的(虽然现在不重要)。因此,要撤消重置,请运行git reset HEAD@{1} (或git reset d27924e )。

另一方面,如果您从那时起运行了一些其他命令更新 HEAD,那么您想要的提交将不会位于列表的顶部,您将需要搜索reflog

最后一点注意:看一下你要取消重置的特定分支的reflog ,比如 master,而不是HEAD ,可能更容易:

$ git reflog show master
c24138b master@{0}: merge origin/master: Fast-forward
90a2bf9 master@{1}: merge origin/master: Fast-forward
[...]

与一般的HEAD reflog相比,它应该具有更少的噪音。

老问题,发布的答案很有用。不过我会选择其他选项。

git reset ORIG_HEAD

ORIG_HEAD引用HEAD先前引用的提交。

我的情况略有不同,我做了git reset HEAD~三次。

要撤消它我必须这样做

git reset HEAD@{3}

所以你应该能做到

git reset HEAD@{N}

但是如果你已经使用了 git reset

git reset HEAD~3

你需要做的

git reset HEAD@{1}

由于 {N} 表示 Reflog 中的操作数。正如马克在评论中指出的那样。