Git合并二进制文件时git checkout --ours返回0路径更新如何解决
问题原因
执行git checkout --ours path/to/file.txt返回updated 0 paths from the index,本质是Git没有匹配到符合操作要求的目标文件,常见诱因有三类:
- 路径参数错误:手写的文件路径存在拼写错误、大小写不匹配(Git默认对路径大小写敏感),或是执行命令时终端所在的工作目录不对,导致Git定位不到指定文件。
- 目标文件不在未合并状态:
--ours/--theirs参数仅对处于未合并(unmerged)冲突状态的文件生效。如果该二进制文件没有触发合并冲突,或是你之前已经执行过git add将其标记为冲突已解决,命令就不会修改任何文件。 - 目标文件未被Git跟踪:如果是合并过程中产生的新二进制文件,还没被纳入Git索引,也会返回这个提示。
解决步骤
- 第一步先执行
git status查看仓库当前状态,在输出的Unmerged paths(未合并路径)分类下,找到目标二进制文件的完整准确路径,直接复制这个路径拼接后续命令,避免手写路径出错。
如果目标文件不在
Unmerged paths列表里,说明它要么没有产生冲突、要么已经被标记为解决,不需要执行这个checkout命令。
- 如果文件已经被误标记为已解决(出现在
Changes to be committed列表中),先执行git restore --staged 复制到的准确文件路径,把文件退回到未合并的冲突状态,再执行git checkout --ours 复制到的准确文件路径,就能正常拉取当前分支的文件版本。 - 注意不同操作场景下的参数指向差异:如果你是在
rebase、cherry-pick过程中处理冲突,--ours和--theirs的指向和普通merge是反过来的:普通merge时--ours对应当前所在分支的版本,rebase时--ours对应变基目标分支的版本,不要选反。 - 选完需要的文件版本后,执行
git add 对应文件路径标记冲突已解决,再继续推进后续的合并/变基流程即可。
内容的提问来源于stack exchange,提问作者Jonathan Williams
相关产品推荐
相关产品推荐

