全量lint后跨分支执行git cherry-pick大量冲突如何解决
跨全量Lint分支提交Cherry-pick冲突解决方法
问题背景
- 已完成全代码库全量Lint校验修复,跨Lint提交向前移植补丁时遇到阻塞
- 现有V1、V2两个分支:V2是V1在某时间点执行完全量Lint后创建的分支
- 目标:将V1分支上名为
orange的提交cherry-pick到V2分支HEAD位置,直接操作会产生大量冲突,无法干净完成cherry-pick流程

已尝试的无效操作
首先尝试生成适配Lint规则的orange'提交,操作步骤如下:
git checkout orange Apply lint git commit --amend --no-edit
基于生成的orange'提交,先后尝试两种操作均未解决冲突问题:
# 尝试1:rebase移植 git rebase HEAD~ --onto origin/V2 # 尝试2:直接cherry-pick适配后的提交 git checkout origin/V2 git cherry-pick orange'
可行解决步骤
核心逻辑:全量Lint提交仅涉及全库格式调整,无业务逻辑变更,冲突本质是格式差异导致的,不需要逐行解决格式冲突,拆分业务改动和格式改动即可:
- 从V2拉取临时工作分支
git checkout origin/V2 -b temp-merge-orange
- 提取
orange提交的纯业务改动,自动过滤所有Lint带来的格式类差异,直接应用到临时分支
git show orange --ignore-all-space --ignore-blank-lines --format= | git apply
上述参数会自动忽略缩进、空格、换行类格式变更,仅应用真正的业务逻辑改动,从根源上避免大面积格式冲突
- 逐文件核对改动完整性,确认没有因格式过滤漏掉业务逻辑,如有遗漏手动补全即可
- 对临时分支上的改动执行和V2分支同规则的Lint校验修复,符合规则后提交,提交信息可直接复用原
orange提交的信息
Apply lint git commit -C orange
- 验证功能正常后,将临时分支的改动合入V2分支即可
个别文件apply失败的补充处理
如果个别文件执行git apply报错,可针对单个文件使用带格式忽略参数的三方合并:
git merge-file -Xignore-all-space [当前分支文件路径] [两个分支共同基线的文件路径] [orange分支对应文件路径]
内容的提问来源于stack exchange,提问作者EncryptedWatermelon
相关产品推荐
相关产品推荐

