仅修改空白字符的提交执行git rebase时为何出现patch does not apply错误?
Git Rebase 失败:仅添加前导空白的提交补丁无法应用
这种情况我碰到过好几次,本质是Git默认会“忽略”空白字符的细微变更,导致它在rebase时找不到正确的位置来应用你那个只加了前导空白的补丁——毕竟在Git眼里,纯空白的修改有时候会被当作“无意义”的差异跳过。
下面给你几个实用的解决办法:
方法1:临时强制Git处理空白差异(rebase卡住时用)
当rebase报错停住后,按以下步骤操作:
- 先执行这条命令,让Git不忽略空白来应用当前补丁:
如果还是不行,试试更严格的修复模式:git apply --whitespace=nowarn --ignore-space-change < .git/rebase/apply/patchgit apply --whitespace=fix < .git/rebase/apply/patch - 把修改后的文件标记为已解决:
git add myfile-1 - 继续完成rebase:
git rebase --continue
方法2:提前配置Git属性,避免后续再踩坑
如果这个文件以后还会有类似的空白修改,建议直接配置Git属性:
- 在仓库根目录创建或编辑
.gitattributes文件,添加一行:
这会告诉Git,对myfile-1 -whitespacemyfile-1这个文件,不要忽略任何空白差异。 - 如果这个提交还没推送到远程,你可以用
git commit --amend重新提交一次,确保Git完整记录下空白变更;如果已经推送了,就跳过这步,直接用方法1处理当前rebase即可。
方法3:手动解决最直接
要是上面的命令都不管用,那就直接手动改:
- 打开
myfile-1,按照你原本的需求添加前导空白。 - 保存后执行
git add myfile-1。 - 再跑
git rebase --continue就能继续了。
内容的提问来源于stack exchange,提问作者Rob Bednark




