Git: 重置 --hard,现在我被卡在过去了。

9

在阅读《Pro Git》书籍中,我正在尝试使用 reset 命令。最终,我使用 reset --hard 命令回到了之前的某个版本,该版本距离当前版本已经有 12 个提交。

但是我无法回到现在或最新提交版本。我已经尝试使用 ORIG_HEAD 进行重置,并尝试通过输入要前进到的修订版的SHA1来重置。

运行 git status 命令后,我看到以下提示信息:Your branch is behind by 12 commits and can be fast-forwarded.

如何将 HEAD 移回到最新的提交版本?

3个回答

13

使用reflog查找您想要前往的位置。您可以使用git reflog获取它,然后只需重置到适当的提交即可。假设您在重置后没有进行任何操作,

git reset --hard 'HEAD@{1}'

应该这样做。


我运行了git reset --hard 'HEAD@{1}',现在根据git status的显示,我只落后了11个提交 :) - Gabe
1
当你执行 git reflog 命令时,会得到提交记录列表,然后你可以使用 git reset 命令回退到正确的提交版本。 - Noufal Ibrahim
HEAD@{0} 显示了我硬重置到历史提交的情况,一直到 HEAD@{17},它显示了我克隆分支的开始。因此,11/12个提交未列出。 - Gabe
2
不会。当你执行 git reflog 命令时,你将得到一个列出了 HEAD 指向的提交记录列表。HEAD@{n} 将是第 n 个较旧的提交记录。你可以在提交记录列表中找到 HEAD 的上一个位置,然后使用 git reset --hard 命令重置到该位置。我无法比这更清楚地描述它了。 - Noufal Ibrahim
当然,你是对的,我是个笨蛋。我是新来的Stackoverflow用户,所以我会尝试一下并给你很多声望 :) 如果你有时间,能否请您快速查看我的另一个问题?question。非常感谢 :) - Gabe
显示剩余3条评论

4

看起来你已经推送了你重置的12个提交。 如果是这样,那么

git merge --ff-only REMOTE/BRANCH_NAME

应该在REMOTE是远程仓库的名称(通常为origin),BRANCH_NAME是您当前分支的名称。


成功了,甚至没有网络也行!很酷,但我真希望我能理解它如何与远程分支合并,即使它无法连接? - Gabe
1
合并是本地操作(需要网络连接的是获取)。 - Noufal Ibrahim

3

除了使用reflog之外,另一种方法是利用你的分支似乎被引用在“remotes”命名空间侧,作为一个远程分支,这就是为什么你会看到:

Your branch is behind by 12 commits and can be fast-forwarded.

一个简单的
git merge origin/yourBranch

这应该足以将你本地分支的HEAD快速前进回到远程分支所在的位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接