如何撤销 'git reset'?
简短回答:
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
更有针对性。