Git处于游离节点,领先master分支的解决方案
分享HEAD detached from XXXX的解决方法
分享HEAD detached from XXXX的解决方法
问题描述:在VSCODE的源代码管理提交时,发现并没有提交到master分支中,通过git graph等插件可以看到master的指针落后于当前提交的节点。执行git status
返回以下日志。
>git status
HEAD detached at 5d16311
nothing to commit, working tree clean
游离分支
一般情况下,HEAD 会指向某个分支的某个Commit-ID。但是 HEAD 偶尔会发生「没有指向某个本地分支」的情况,这种状态的 HEAD 称为 detached HEAD 。
游离状态的本质上是本地的HEAD指向了一个未知的分支,HEAD不会指向任何分支,严谨的说是HEAD指向了一个没有分支名字的修订版本,此时已经处于游离状态。
哪些情况可能会出现detached HEAD?
1)使用 git checkout 跳转至某个 Commit-ID,而这个 Commit-ID 刚好目前没有分支指向它。当切换至其他分支时,这个 (HEAD detached at e0c619c) 临时分支是会被干掉。可以使用 git switch -c <new-branch-name> 命令来创建一个新分支来指向该 Commit-ID
2)Rebase 的过程其实也是处于不断的detached HEAD状态
3)切换至某个远程分支
解决方案
head指针处于游离状态,需要建立一个临时分支然后将它合并到目标分支,最后删除那个临时分支即可。
1.切换到该提交
>git reflog // 使用查看Git操作历史
24c940e (HEAD -> master, origin/master) HEAD@{0}: checkout: moving from 5d163114e8ae7c9b7cf5b8430a35b2adfeba732b to master
5d16311 HEAD@{1}: commit: 版本更新描述
>git checkout -b temp 5d16311
这将把HEAD指向这个特定的提交,再次进入一个游离HEAD状态,并创建了一个temp
分支来保存这个提交。
2.切换到目标分支并合并 切换到目标分支(例如master)并将这个新分支合并进去:
>git checkout master
>git merge temp
3.推送目标分支到远程仓库
git push origin master
4.清理
合并完成后,如果确认所有改动都已经正确地合并到了目标分支,可以删除临时分支:
git branch -d temp
如果git提示该分支尚未完全合并而拒绝删除,可以使用-D选项强制删除:
git branch -D temp
参考文献