我的一个同事刚遇到这种情况。在他的情况下,在分离的头部有提交——它们在 R-Studio 中工作——并且该工具确实警告他们可以使用这个和那个 SHA 引用创建分支......但因为唯一的选项是“关闭” ——呃!!这是一个信息框——他们关闭了对话并永远丢失了信息……
由于该reflog
命令,我们可以看到更改没有丢失。但在我们的例子中,git branch
没有按预期工作......或者传入git pull
确实以某种方式搞砸了。我们必须将 reflog 中的更改捕获到新创建的分支:
git cherry-pick 0b823d42..3cce27fc
它将我们想要的所有提交放在分支中。然后我们可以将分支合并到develop
没有问题的地方。
以防万一这对任何人都有用,我们确实通过查看标记为“checkout”(识别分支转移)之间的那些来确定分离头上的提交:reflog
e09f183b HEAD@{3}: pull: Fast-forward
b5bf3e1d HEAD@{4}: checkout: moving from lost_changes to develop
b5bf3e1d HEAD@{5}: checkout: moving from 3cce27fca50177a288df0252f02edd5da5ee64fd to lost_changes
3cce27fc HEAD@{6}: commit: add statistics
417a99a4 HEAD@{7}: commit: add test
0b823d42 HEAD@{8}: commit: new utility class
d9ea8a63 HEAD@{9}: checkout: moving from develop to d9ea8a635d4c2349fcb05b3339a6d7fad5ae2a09
b5bf3e1d HEAD@{10}: pull: Fast-forward
我们想要的是HEAD@{8}
(HEAD@{6}
包括两者)。所以我们得到了它们:
git cherry-pick 0b823d42..3cce27fc
然后通常的合并解决和最终提交给我们留下了分支 lost_changes 托管我们认为丢失的分离头工作。这次将其合并到开发中是快进的。