一尘不染

如何撤消“git重置”?

git

最简单的撤消方法是什么:

git reset HEAD~

目前,我能想到的唯一方法是git clone http://...从远程仓库执行。


阅读 249

收藏
2022-02-21

共1个答案

一尘不染

简短的回答:

git reset 'HEAD@{1}'

长答案:

Git 会记录所有 ref 更新(例如,签出、重置、提交、合并)。您可以通过键入以下内容来查看它:

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

2022-02-21