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

Git执行git fetch更新master分支报错:拒绝拉取到已检出分支

Git fetch origin master:master 执行失败的原因分析

问题场景

此前一直通过命令git fetch origin master:master在未处于master分支时更新本地master分支,今日在某仓库克隆版本执行时失败,报错:

fatal: refusing to fetch into branch 'refs/heads/master' checked out at '/path/to/project/directory'

执行命令时并未处于master分支,且同一仓库的其他克隆版本可正常执行。环境为macOS Monterey 12.6 (21G115),Git版本为Homebrew安装的2.38.0。

补充命令输出:

$ git worktree list
/path/to/project/directory  aa00aa0a0a0 [my-current-branch]
$ git branch -vv
  main                 bb11bb1b1b1 Title of the commit on main
  master               cc22cc2c2c2 [origin/master] Title of the commit on master
* my-current-branch    aa00aa0a0a0 [origin/my-current-branch] Title of the commit on my-current-branch
$ git remote show origin
* remote origin
  Fetch URL: git@github.com:my-org/my-repo.git
  Push  URL: git@github.com:my-org/my-repo.git
  HEAD branch: master
  Remote branches:
    main                 tracked
    master               tracked
    my-current-branch    tracked

核心原因

Git 禁止直接更新被任何工作树检出的分支,哪怕当前所在工作树并未切换到该分支。报错说明master分支在仓库的某个工作树中被检出了——大概率是你之前通过git worktree add创建过基于master的工作树,之后删除了工作树目录但未执行git worktree prune清理Git的追踪记录,导致Git仍认为master被其他工作树占用。

验证方法

执行以下命令查看Git追踪的所有工作树(包括目录已删除但未清理的无效记录):

git worktree list --porcelain

如果输出中存在指向master分支的条目,哪怕对应的目录不存在,即可确认是该问题导致的报错。

解决办法

1. 清理无效工作树记录

如果那个基于master的工作树已不再需要,执行以下命令清理Git的无效工作树追踪记录:

git worktree prune

清理完成后,重新执行git fetch origin master:master即可正常更新。

2. 绕开直接更新限制

如果暂时无法清理工作树,可通过间接方式更新master分支:

# 先将远程master拉取到临时分支
git fetch origin master:tmp-master
# 切换到master分支合并临时分支
git checkout master
git merge tmp-master
# 删除临时分支并切回原分支
git branch -D tmp-master
git checkout my-current-branch

或者更简洁的方式(若允许切换到master分支):

git checkout master
git pull origin master
git checkout my-current-branch

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:20:28