git - "fatal: ref HEAD is not a symbolic ref"在交互式 git rebase 期间

标签 git rebase

有 3 次提交 - 一次正确,然后两次愚蠢的清理,打字错误等。所以我想压扁它们。开火:

git rebase -i HEAD~3

听起来很简单,而且它应该可以工作 - 我在遇到问题后在一个全新的存储库中尝试过它,它按预期工作。编辑器显示 3 个提交,选择顶部,压扁其他两个,保存并退出,完成。如果我以详细模式运行,我会看到更多详细信息——git 通过检查我“选择”的第一个提交进入分离的 HEAD 状态,然后执行“Rebasing 2/3”和“Rebasing 3/3”,显然创建了一些临时提交一路走来——然后是一条成功消息;编辑器在某个时候再次 pop ,让我更改提交消息。一切都很好。

但是相同的命令在工作 repo 中消失了! 3 在编辑器中提交,pick-squash-squash.. 但是这次,我没有看到“Rebaseing 2/3”,而是“HEAD is now at my-SHA-1”之后的第一行,它遇到了一个致命的!

HEAD is now at 48a6c3d... <commit message>
fatal: ref HEAD is not a symbolic ref

但是为什么 git 期望 HEAD 是一个符号引用? Rebase 进程确实分离了 HEAD - 与我在探索性示例中看到的相同 - 那么为什么第二个示例中的致命问题,而不是第一个示例中的致命问题? cat .git/HEAD 给我“选择”的提交的 SHA1...

我花了几个小时阅读和研究,但这里有些地方不对劲,我找不到它是什么!我怀疑 可能 一些钩子(Hook)是负责任的(对它们知之甚少,并且知道有问题的 repo 确实有一些)。感谢您考虑回答此问题!

最佳答案

您的“工作”存储库可能以某种方式损坏了。参见 I can't git rebase --interactive anymore了解详情。

我会尝试在你的工作仓库中运行 git status 来弄清楚发生了什么。然后例如git rebase --abortgit merge --abort 或类似的东西可能是必需的。

我也会运行 git fsck

在您的存储库和工作目录准备就绪后,交互式 rebase 应该可以正常工作。另请注意,您可能需要 git rebase --root --preserve-merges ... 以防您想触及存储库中的第一个提交。

关于git - "fatal: ref HEAD is not a symbolic ref"在交互式 git rebase 期间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18104923/

相关文章:

git merge 不会出现在提交历史记录中

GIT : Multiple Jira ticket in one feature branch

Git rebase 在一个分支上,该分支具有由另一个 rebase 组合的提交

git - 通过 rebase 保持远程存储库同步

git - 如何将默认命令更改为 git rebase 中的所有提交?

git - 有没有一种简单的方法可以将代码**并行**推送到 50 个网络服务器?

Hudson checkout 问题的 Git 插件

Git rebase 导致几乎所有文件的 merge 冲突 - 即使是未触及的文件

git - 如何在 2 个 git 存储库之间组织工作?

merge - Gerrit 在提交补丁集之前总是 rebase 以避免合并提交