You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

误推分支导致Git双HEAD,如何修复HEAD状态?

Git双HEAD问题修复(无需撤销提交)

我使用Git已有多年,此前在Windows系统中搭配CLI和Tortoise Git使用,很少遇到问题。切换到Linux(kubuntu 23.10)后,安装了VS Code及Git Graph扩展。在分支中提交工作后,仓库出现了两个HEAD,希望不撤销提交来修复问题,目前工作仍在继续。原本只想本地提交分支变更,但工具自动推送并创建了另一个HEAD,尝试了rebase等命令未解决,操作日志如下:

djorg@DESKTOP-25485G2 MINGW64 ~/AppData/Roaming/MetaQuotes/Terminal/6BCF14A3917E5BC71FD48812B8ED0586/MQL4 (master)
$ git push origin master
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 12 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 308.80 KiB | 34.31 MiB/s, done.
Total 5 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
To https://github.com/djorgens2/MT4-Master.git
   efa5240..bf6bcee  master -> master

djorg@DESKTOP-25485G2 MINGW64 ~/AppData/Roaming/MetaQuotes/Terminal/6BCF14A3917E5BC71FD48812B8ED0586/MQL4 (master)
$ git rebase origin master
Current branch master is up to date.

djorg@DESKTOP-25485G2 MINGW64 ~/AppData/Roaming/MetaQuotes/Terminal/6BCF14A3917E5BC71FD48812B8ED0586/MQL4 (master)
$ git pull origin -r master
From https://github.com/djorgens2/MT4-Master
 * branch            master     -> FETCH_HEAD
Already up to date.

djorg@DESKTOP-25485G2 MINGW64 ~/AppData/Roaming/MetaQuotes/Terminal/6BCF14A3917E5BC71FD48812B8ED0586/MQL4 (master)
$ git switch man-v5
Switched to a new branch 'man-v5'
branch 'man-v5' set up to track 'origin/man-v5'.

djorg@DESKTOP-25485G2 MINGW64 ~/AppData/Roaming/MetaQuotes/Terminal/6BCF14A3917E5BC71FD48812B8ED0586/MQL4 (man-v5)
$ git switch master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

djorg@DESKTOP-25485G2 MINGW64 ~/AppData/Roaming/MetaQuotes/Terminal/6BCF14A3917E5BC71FD48812B8ED0586/MQL4 (master)
$

第一步:确认双HEAD具体状态

先执行以下命令查看仓库完整提交图谱,明确两个HEAD的位置关系:

git log --oneline --graph --all

执行后会显示所有分支的提交历史,能清楚看到是否是本地游离HEAD或远程分支分叉导致的双HEAD问题。

针对不同情况的修复方案

情况1:本地存在游离HEAD

如果日志显示有一个HEAD处于detached at xxx状态(即游离状态):

  1. 切换到你正在工作的目标分支(比如man-v5):
    git switch man-v5
    
  2. 将游离HEAD对应的提交合并到当前分支(替换<游离提交哈希>为实际哈希值,可从git log结果中获取):
    git merge <游离提交哈希>
    
  3. 合并完成后,确认状态正常,再推送分支到远程:
    git push origin man-v5
    

情况2:远程分支出现分叉

如果远程仓库的master分支出现两个并行提交(即工具自动推送导致的分叉):

  1. 拉取远程最新的所有分支状态:
    git fetch origin
    
  2. 切换到本地master分支:
    git switch master
    
  3. 将本地master分支变基到远程最新的master提交上:
    git rebase origin/master
    
  4. 用安全强制推送到远程(仅当你是仓库唯一维护者,或已和团队沟通确认后执行):
    git push origin master --force-with-lease
    

关闭工具自动推送的设置

为避免再次出现自动推送问题,调整VS Code及Git Graph的设置:

  • 打开VS Code设置(快捷键Ctrl+,),搜索git.autopush,将其设置为false
  • 搜索git.autofetch,按需设置为false
  • 打开Git Graph扩展的设置,检查是否存在自动推送相关选项,一并关闭

内容的提问来源于stack exchange,提问作者Dennis Jorgenson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:08:23