Could not detach HEAD

5,692 阅读1分钟
不能分离头指针
问题来源:

想要让git线性提交好看一点,于是乎用到了git pull --rebase命令。结果总是出现 fatal: Could not detach HEAD。总之就是不能分离头指针。

搜索得到的答案往往都是创建临时分支之后合并,这违背了让git的记录线性的初衷。 随后进行了更多的尝试,发现都绕不开一个合并的操作。

这个时候想到了rebase、reset、merge的区别

  • rebase 并没有进行合并操作,只是提取了当前分支的修改,将其复制在了目标分支的最新提交后面
  • merge 是一个合并操作,会将两个分支的修改合并在一起。它的提交历史忠实地记录了实际发生过什么,关注点在真实的提交历史上面
  • git reset 是回滚到某次提交
    git reset --soft 此次提交之后的修改会被退回到暂存区
    git reset --hard 此次提交之后的修改不做任何保留

然后我就想既然需要pull的时候rebase,那我先rebase一下可以么。
于是在项目下

git --rebase 'xxxxxx'

之后项目变好了。可以正常的

git add .   
git commit -m "xxxxx"   
git pull --reabase  

不会再出现分离头指针的问题了。

至此问题解决

原理呢,个人理解是rebase先确定分支到底是哪条,之后再提取对应的提交信息进行合并。