Git应用二进制文件Diff出现‘patch does not apply’错误如何解决?
解决Git二进制补丁无法应用的问题
嘿,这个问题我之前也碰到过,本质是当前分支的二进制文件版本和补丁依赖的基础版本不匹配,所以Git没法正确应用差异。给你几个针对性的解决办法,按需选择:
方法一:直接替换为test_branch的版本(最简单,适合不需要保留当前分支修改的情况)
如果你不需要当前分支里这个二进制文件的现有改动,直接把test_branch的版本拿过来就行,不用折腾补丁:
git checkout test_branch -- binary_file_name.dat
执行完这个命令,当前分支的文件就和test_branch里的完全一致了,直接提交即可。
方法二:手动合并修改(适合需要保留当前分支改动的情况)
因为Git对二进制文件默认没有自动合并能力,所以如果当前文件有你要保留的修改,得手动处理:
- 先把test_branch的二进制文件导出到临时文件:
git show test_branch:binary_file_name.dat > temp_binary.dat - 用你常用的二进制文件对比/编辑工具(比如支持二进制模式的对比工具、专门的二进制编辑器),对比当前的
binary_file_name.dat和临时文件temp_binary.dat,手动合并你需要的改动。 - 合并完成后删除临时文件,提交最终的文件。
方法三:对齐基础版本后再应用补丁(一定要用patch方式的情况)
报错信息里的e4d7fc486a4ddd1638445449c5bfcec760b23c7f是补丁依赖的基础文件哈希,先把当前分支的文件回退到这个版本:
git checkout e4d7fc486a4ddd1638445449c5bfcec760b23c7f -- binary_file_name.dat
然后再执行你原来的命令应用补丁:
git diff --full-index --binary test_branch binary_file_name.dat | git apply
这样就能成功应用了。如果之前当前分支的文件有需要保留的改动,之后再手动合并回去即可。
内容的提问来源于stack exchange,提问作者ajfbiw.s
相关产品推荐
相关产品推荐

