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

Git合并主分支到功能分支时,如何保留双方对同一文件的修改?

问题原因与解决方案

为什么会出现这种情况?

出现这个问题通常是以下两种原因之一:

  • Git自动合并的静默覆盖:Git的三路合并算法会自动处理无冲突的修改。如果main分支对example.txt的修改恰好覆盖了feature分支早期提交中对该文件的修改内容(比如main重写了某段文本,而feature早期提交只修改了这段里的几个字),Git会判定main的版本是更“新”的最终版本,直接采用main的内容,不会触发冲突提示,导致feature的早期修改被静默覆盖。
  • 提交历史的重复识别:如果feature分支的早期提交已经通过cherry-pick、rebase等方式被合并到main分支过,Git会判定这些提交的修改已经存在于main的历史中,合并时会跳过这些提交的修改,只保留feature分支中未被合并的最新提交内容。

如何保留双方修改?

1. 撤销错误的合并(如果刚完成合并还没推送到远程)

先回到合并前的状态:

git reset --hard HEAD~1

注意:这个命令会彻底丢弃合并后的所有修改,执行前确保没有未保存的本地更改。

2. 更安全的同步方式:使用Rebase

Rebase会把feature分支的所有提交逐个“重演”在main分支的最新提交之上,每个提交都会检查与main的冲突,能确保所有feature的修改都被处理,不会丢失:

git checkout feature/the-feature-branch
git rebase main

执行过程中如果遇到冲突,Git会暂停并提示你解决,解决后执行:

git add example.txt
git rebase --continue

如果某个提交不需要保留,可以执行git rebase --skip跳过。

3. 手动检查差异后再合并

如果坚持使用merge,合并前先查看双方对example.txt的具体差异,提前了解修改位置,避免自动合并的静默覆盖:

git diff main feature/the-feature-branch -- example.txt

查看差异后再执行合并,若合并后仍有问题,可手动修改example.txt保留双方需要的内容,然后提交:

git add example.txt
git commit

4. 恢复丢失的修改(如果已经推送了错误的合并)

如果已经把错误的合并推送到远程,可通过git reflog找到合并前的feature分支commit,然后创建新分支恢复:

git reflog
# 找到合并前的commit哈希值,比如abc123
git checkout -b feature/recovered abc123

然后在新分支上重新同步main分支的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:22:39