最简单的撤消方法是什么:
git reset HEAD~
目前,我能想到的唯一方法是git clone http://...从远程仓库执行。
git clone http://...
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
HEAD~
git reset HEAD@{1}
git reset d27924e
另一方面,如果你从那以后运行了一些其他命令更新 HEAD,你想要的提交不会在列表的顶部,你需要搜索reflog.
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。
HEAD reflog