如何撤销 'git reset'?

15 浏览
0 Comments

如何撤销 'git reset'?

我想撤销这个命令:

git reset HEAD~

admin 更改状态以发布 2023年5月20日
0
0 Comments

这是一个老问题,而且已经有很多回答了。我会再提供一种选择。

git reset ORIG_HEAD

ORIG_HEAD 指的是之前 HEAD 所指向过的提交。

0
0 Comments

简短回答:

git reset 'HEAD@{1}'

详细回答:

Git保留了所有引用更新的日志(例如,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中搜索。

最后需要注意的是,查看要取消重置的特定分支(如master)的reflog可能会更容易,而不是HEAD

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

这样做可能会比一般的HEAD reflog更有针对性。

0