【问题标题】:Used git reset --hard "commit id", and now my HEAD is detached使用 git reset --hard "commit id",现在我的 HEAD 已分离
【发布时间】:2021-12-14 01:52:17
【问题描述】:

我对 git 比较陌生。

问题:只是想将我的远程主分支与合并分支合并。

我想将我的远程主分支与我正在处理的合并分支同步:合并分支在主分支后面有 80 个提交。由于某种原因,我遇到了一些冲突,自动合并失败。

然后我尝试切换到我的远程主分支(git checkout origin/main),它也失败了,建议我先解决冲突。我决定简单地回到之前的提交,为此我使用了:

git reset --hard *commit id*

然后我删除了我的合并分支,并继续从远程主分支 (origin/main) 创建一个新的合并分支。这就是问题的开始。我写

git checkout origin/main

我收到了这个

Note: switching to 'origin/main'.

You are in 'detached HEAD' state. You can look around, make experimental 
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.      

If you want to create a new branch to retain commits you create, you may 
do so (now or later) by using -c with the switch command. Example:       

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at *commit id* *Description*

我尽我所能,阅读文章,阅读 stackoverflow 问题,甚至删除并克隆了我的本地存储库,但不知何故无法重新附加 HEAD 到远程分支,如果你可以。

这里有什么我遗漏的吗?我想要的只是使用 git checkout origin/main 它应该指向分支而不是特定的提交 id。

我们不胜感激。自过去 5 小时以来一直在努力解决这个问题。

【问题讨论】:

  • 不能签出远程分支,只能签出他们引用的提交。这就是为什么你最终处于分离的头部状态。您没有签出origin/main,而是签出了它引用的提交。相反,请查看链接到远程分支的 local main 分支,然后根据您的需要移动它。然后稍后进行“强制推送”以强制更新远程分支以匹配。 注意!绝对确保您知道自己在这里做什么,否则您可能会从远程删除您不想删除的提交!
  • 所以根据我的理解,如果我必须推动改变,我应该如此有力地向前推进?还是我应该尝试常规的git push 并且它会起作用?这会让我的 HEAD 指向分支而不是提交吗?
  • 你说你读过文章,SO,等等。 git 的建议不起作用git switch -c &lt;new-branch-name&gt;。如果是这样,错误是什么。
  • 我现在明白你的评论了。分离 HEAD 的概念起初令人困惑,感谢您将其清除。 @RenéLink 没有错误。 git checkout origin/main 指向它引用的提交,而不是我认为是“错误”的分支,而它只是一个正常状态。谢谢大家的澄清!

标签: git github version-control git-branch


【解决方案1】:

然后我删除了我的合并分支,并继续从远程主分支 (origin/main) 创建一个新的 merge 分支

这实际上不是你所做的。 git checkout origin/main 签出了origin/main 引用的提交,因此最终处于分离的头部状态。

您需要做的是git checkout -b merge origin/main。这将有效地创建从 origin/main 开始的本地 merge 分支并检查它。

如果您当前处于分离头状态,您应该能够只执行上述命令来解决您的问题。

【讨论】:

  • 啊。我现在明白了。我一直在使用 VS Code 中的 UI 来创建新分支。这样做时,我无法在下拉列表中找到 origin/main,这就是为什么我写 git checkout origin/main 只是为了确认我是否可以通过终端找到它。现在更有意义了。在进行下一次合并时,我将试一试这个命令 git checkout -b merge origin/main,希望它能够正常工作!感谢您澄清情况! :D
  • @RishabhMaini 如果此答案回答了您的问题,请考虑点击投票号码下方的接受按钮。
猜你喜欢
  • 2018-01-13
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 2010-09-05
相关资源
最近更新 更多