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

使用BFG清理Git历史时遇‘branch is currently checked out’错误如何解决?

解决BFG清理本地仓库历史后push失败的问题

问题根源

你用git clone --mirror克隆本地仓库得到镜像仓库后,往原仓库push时提示branch is currently checked out,是因为原仓库是普通非裸仓库,当前正处于某个分支的检出状态,Git禁止直接推送覆盖已检出的分支。

两种可行解决方案

方案一:直接在原仓库用BFG处理(更简单)

不用绕镜像仓库的弯路,直接在原仓库操作:

  1. 先备份原仓库:把整个仓库文件夹复制到其他位置,避免操作失误丢数据。
  2. 进入原仓库目录,确保没有未提交的更改:
    • 有未提交修改的话先暂存:git stash
    • 或者提交:git commit -a -m "暂存更改"
  3. 执行BFG清理大文件(替换成你的大文件名):
    java -jar bfg.jar --delete-files 你的大文件名.ext
    
  4. 完成BFG的收尾清理:
    git reflog expire --expire=now --all && git gc --prune=now --aggressive
    
  5. 现在历史已经清理干净,直接强制推送到GitHub:
    git push origin --force
    

方案二:继续用镜像仓库解决push报错

如果坚持用镜像仓库的方式,需要让原仓库暂时脱离分支检出状态:

  1. 进入你的原本地仓库,创建并切换到临时空分支:
    git checkout --orphan temp-branch
    git rm -rf .
    git commit -m "临时占位提交"
    
  2. 回到镜像仓库目录,执行推送:
    git push
    
  3. 推送完成后回到原仓库,切回原工作分支(比如main),并删除临时分支:
    git checkout main
    git branch -D temp-branch
    
  4. 执行收尾清理:
    git reflog expire --expire=now --all && git gc --prune=now --aggressive
    
  5. 推送到GitHub:
    git push origin --force
    

重要提醒

  • 强制推送前,确认没有其他协作者基于旧的提交历史工作,否则他们的后续提交会和清理后的历史冲突。
  • 无论用哪种方案,备份原仓库都是第一要务!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:24:04