不知何故,我最终得到了一个分离的 HEAD。我做了一些提交,它们在我的提交历史中显示为 HEAD(但master
后面有几个提交)。然后我试图通过检查来修复分离的头部master
。
现在我看不到我之前对分离的 HEAD 的提交。他们永远消失了吗?
不知何故,我最终得到了一个分离的 HEAD。我做了一些提交,它们在我的提交历史中显示为 HEAD(但master
后面有几个提交)。然后我试图通过检查来修复分离的头部master
。
现在我看不到我之前对分离的 HEAD 的提交。他们永远消失了吗?
[我以前的提交] 是否永远消失了?
不。即使这些提交没有出现在 的输出中git log
,它们仍然存在于您的存储库的内部,您仍然可以检索它们;在这种情况下,reflog就是您的安全网。
如果没有更多信息,很难提供一系列绝对可以让您摆脱困境的命令,但您可以执行以下操作:
通过运行打开master
分支的 reflog
git reflog master
使用提交消息作为提示,确定您希望master
分支指向的提交;写下(在一张纸上)master
reflog 中相应条目的编号。退出 reflog。
确保master
是当前分支:
git checkout master
跑
git reset master@{<n>}
其中<n>
代表与感兴趣的提交相对应的 reflog 条目的编号。
之后,master
应该指向所需的提交,就像在你最终得到一个分离的 HEAD 之前一样。
否。请检查 reflog ( git reflog
)。
除非您使用的是石器时代版本的 Git,否则它打印出的消息非常好(这些来自 2.2.0,但我认为它们从 1.8.X 或更早版本开始就是这种方式)
当你第一次进入分离的头部状态时,它应该准确地告诉你如何创建一个分支来工作。
注意:检查“HEAD~1”。
您处于“分离 HEAD”状态。您可以环顾四周,进行实验性更改并提交它们,并且您可以放弃在此状态下所做的任何提交,而不会通过执行另一个签出来影响任何分支。
如果您想创建一个新分支来保留您创建的提交,您可以(现在或以后)再次使用 -b 和 checkout 命令来执行此操作。例子:
git checkout -b new_branch_name
当您离开分离的头部状态时,您应该已经收到此消息
警告:您留下了 1 个提交,未连接到您的任何分支:
27c4eec 富
如果您想通过创建新分支来保留它们,这可能是这样做的好时机:
git 分支 new_branch_name 27c4eec
如果您没有看到这些消息,那么您应该考虑升级您的 Git 版本。
如果您确实看到了这些消息,那么只需按照他们打印的说明进行操作。