git - 如何撤消 'git reset' ?

标签 git

我想撤消这个命令:

git reset HEAD~

最佳答案

简答:

git reset 'HEAD@{1}'

长答案:

Git 保留所有 ref 更新的日志(例如, checkout 、重置、提交、 merge )。您可以通过键入以下内容来查看它:

git reflog

此列表中的某处是您丢失的提交。假设您刚刚输入 git reset HEAD~ 并想撤消它。我的 reflog 看起来像这样:

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

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

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

最后一点:查看您想要取消重置的特定分支的 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 - 如何撤消 'git reset' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2510276/

相关文章:

git - 我运行了 'git pull'但仍然无法自动 merge ?

git - 从 git 存储库使用 Composer 安装包

git - Git 特殊文件扩展名的替代 diff 算法

ruby - Rugged - 获取、 pull rebase 可能吗?

git - 如何 git 忽略存储库中任何位置的 ipython 笔记本检查点

git - 如何强制 Jenkins 重建分支?

xml - 使用 git 和 xml 数据的协作环境

git - 如何提取和删除 Git 中的 merge 分支?

包含 CRLF 和 LF 文件的 Git 存储库?

python - Django merge 两个具有相同 ID 的迁移?