如何在旧分支上为已重命名的文件应用Git补丁?
解决补丁中.hh文件与当前分支.h文件不匹配的应用问题
针对补丁里的.hh文件在当前旧分支中是.h后缀的情况,有两种直接可行的解决方式:
方法一:修改补丁文件中的文件名
直接批量替换补丁里的文件名后缀,适配当前分支的文件结构:
- 用sed命令全局替换补丁中的
.hh为.h(以your-patch.patch为例):sed -i 's/\.hh/\.h/g' your-patch.patch - 执行补丁应用:
git apply your-patch.patch - 如果出现冲突,手动解决冲突后再完成补丁应用。
方法二:使用Git补丁重命名映射
不需要修改原始补丁,通过git apply的参数指定文件名映射关系:
- 单文件映射:直接在命令行指定每个文件的新旧路径:
git apply --rename-from=polyglot/java.hh --rename-to=polyglot/java.h \ --rename-from=polyglot/v7.hh --rename-to=polyglot/v7.h \ your-patch.patch - 多文件批量映射:创建一个映射文件(比如
rename-map.txt),每行格式为旧路径 新路径:
然后执行:polyglot/java.hh polyglot/java.h polyglot/v7.hh polyglot/v7.hgit apply --rename-map=rename-map.txt your-patch.patch
注意事项
- 如果补丁包含新增的
.hh文件,根据旧分支的规范,要么同步修改新增文件的后缀为.h,要么保留后缀(后续合并时需统一处理) - 补丁应用完成后,用
git diff检查修改内容是否符合预期,确认无误后再提交变更
内容的提问来源于stack exchange,提问作者nfl
相关产品推荐
相关产品推荐

