【问题标题】:gitx How do I get my 'Detached HEAD' commits back into master [duplicate]gitx 如何让我的“分离的 HEAD”提交回到主 [重复]
【发布时间】:2011-06-18 05:54:43
【问题描述】:

使用 Git X 并且一定在某事上摸索过。看起来几天前我创建了一个名为detached HEAD 的分支并一直致力于它。我的正常流程是提交到master,然后将其推送到origin。但是我不能推送detached HEAD

我的下一站搞砸了。我选择了git checkout master - 我的detached HEAD 分支消失了。回到我的项目,我在过去几天所做的所有更改都已清除。

无论如何我可以恢复这些更改吗?

【问题讨论】:

标签: git version-control


【解决方案1】:

如果checkout master 是您做的最后一件事,那么reflog 条目HEAD@{1} 将包含您的提交(否则使用git refloggit log -p 来查找它们)。使用git merge HEAD@{1} 将它们快进到master。

编辑:

如 cmets 中所述,Git Ready has a great article 对此。

git refloggit reflog --all 将为您提供错误提交的提交哈希。

来源:http://gitready.com/intermediate/2009/02/09/reflog-your-safety-net.html

【讨论】:

  • 不是超级 git 用户,这很有帮助,但不够详细。它促使我搜索网络 - 谢谢。我发现gitready.com/intermediate/2009/02/09/… 非常有用
  • 对于在 Powershell (Windows) 中运行 HEAD@{1} 的任何人,您将收到一个非描述性错误,例如 error: unknown switch 'e'。这是因为花括号在 Powershell 中具有特殊的含义。您需要输入以下内容:'HEAD@{1}'。
  • 如果你使用的是fish shell,你会得到这个错误merge: HEAD@1 - not something we can merge,fish删除了花括号,所以先切换到bash,然后它就可以工作了。
  • 除了合并之外,您还可以挑选分离的提交,例如git cherry-pick HEAD@{3}。如果有多个提交需要救援,这不会因为大量合并而使历史混乱。
  • Git for Windows 似乎需要HEAD@{1} 的引号,否则会出现奇怪的错误......error: unknown switch c'` -> 所以使用git merge "HEAD@{1}"
【解决方案2】:

如果您分离的 HEAD 是 master 的快进,并且您只想要上游提交,您可以

git push origin HEAD:master

直接推送,或者

git checkout master && git merge [ref of HEAD]

会将其合并回您的本地主服务器。

【讨论】:

  • 这对我有用,而@Josh Lee 的方法却没有。所以我很高兴这有效!
  • 这会将分离头上的提交推回原点(源/主),但在本地使您处于分离状态。 git checkout origin master 是回到主分支的最佳方式吗?最好先合并到master,然后再推回原点。
  • 对我有用,谢谢。
猜你喜欢
  • 2022-01-12
  • 1970-01-01
  • 2011-09-07
  • 1970-01-01
  • 2022-11-20
  • 2018-10-01
  • 2015-03-03
  • 1970-01-01
相关资源
最近更新 更多