You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git合并子分支到父分支时被已还原提交覆盖代码的解决方案求助

解决方案

方案1(最高优先级推荐,不修改子分支历史,无协作冲突风险)

核心逻辑:父分支上的Dr/Er/Fr是针对你之前误提交的D/E/F的撤销操作,只需要先把这三个撤销操作本身撤销,父分支就能回到和子分支基线完全对齐的状态,后续合并不会触发回滚逻辑。
操作步骤:

  1. 切换到本地父分支,拉取远端最新代码保证版本一致
git checkout Father
git pull origin Father
  1. 找到Dr/Er/Fr三个revert提交的commit哈希,按从旧到新的顺序依次撤销这三个提交:
# 单条撤销示例,替换为实际的commit哈希
git revert <Dr的commit哈希>
git revert <Er的commit哈希>
git revert <Fr的commit哈希>

# 如果三个提交是连续的,可批量操作,替换为实际的起止哈希即可
git revert <Dr的commit哈希>^..<Fr的commit哈希>
  1. 此时父分支状态已经和子分支的D/E/F基线完全对齐,直接合并子分支即可:
git merge <子分支名称>
  1. 全量验证代码功能无误后,推送到远端即可。

方案2(适合要求线性提交历史的场景,提交记录更简洁)

核心逻辑:已知父分支除了三个revert提交外无其他变更,通过rebase操作将子分支的所有提交移植到父分支最新节点上,全程优先保留子分支的变更即可规避revert回滚问题。
操作步骤:

  1. 切换到本地子分支,拉取远端最新代码
git checkout <子分支名称>
git pull origin <子分支名称>
  1. 执行rebase操作,指定父分支为上游,所有冲突统一选择保留子分支的变更:
git rebase Father
# 若出现冲突,对每个冲突文件执行以下操作保留子分支代码
git checkout --ours <冲突文件路径>
git add <冲突文件路径>
# 所有冲突处理完成后继续rebase流程
git rebase --continue
  1. rebase完成后切换回父分支,执行快进合并:
git checkout Father
git merge <子分支名称>
  1. 验证代码功能无误后推送远端即可。

方案选择建议:如果子分支是多人协作的公共分支,优先选择方案1,不会修改子分支的提交历史,不会影响其他协同开发的同事;如果是个人开发的分支且团队要求线性提交历史,可选择方案2。

内容的提问来源于stack exchange,提问作者RushTfe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:57:05