首页/开发/Git 与协作速查/git merge -X theirs 冲突块取对方版本
合并变基与冲突71 条

git merge -X theirs 冲突块取对方版本

双方改到同一区域时自动采用被合并分支一侧的内容,其余改动照常并入;常用于把上游/模板分支更新进本地既有定制。

Git 与协作速查开发更新于 2026-10-13

merge -X theirs 是什么

git merge -X theirs 与 -X ours 正好相反:双方改到同一区域发生冲突时,自动采用被合并分支(theirs)一侧的内容,其余未冲突的改动照常并入。它常用于「把上游更新吃进来,同时接受上游对这部分的决定」,例如本地定制分支同步上游基线、派生项目跟随模板更新。注意它只影响冲突块,不会整体替换你的分支,属于策略的辅助选项而非独立策略。

基本信息

用途冲突块自动采用对方版本
语法git merge -X theirs <分支>
对称命令-X ours 取当前分支
单文件写法git checkout --theirs -- <文件>
平台任意 Git 客户端

典型使用场景

  • 本地定制分支同步上游基线,接受上游在冲突处的改动
  • 派生项目跟随模板更新,保持与上游一致
  • 把自动生成文件(锁文件、快照)按上游版本对齐
  • 清理历史分歧时以某一侧为准,随后再统一回归测试
  • 紧急同步上游修复,先用默认取对方再补自家定制
  • 逐文件处理时只对个别文件采用对方版本

常用示例

常用示例
git switch app-custom
git merge -X theirs upstream/main      # 冲突块取对方
git diff HEAD^ --stat                  # 复核被覆盖的改动
git log --oneline -3                   # 确认历史形态

逐文件选择对方版本

逐文件选择对方版本
git merge upstream/main                # 先正常合并产生冲突
git checkout --theirs -- config/db.yaml
git add config/db.yaml
git commit

「取对方」相关写法

写法含义
-X theirs仅冲突块取对方,非冲突改动仍保留我方
-s ours整体忽略对方内容,仅记录合并关系
checkout --theirs对指定文件取出对方版本
自动取对方意味着你的本地修改会在冲突区域内被静默覆盖;定制分支上使用后必须逐项复核被覆盖的配置。
与 -X ours 相同,它只是合并策略的辅助选项,不会替你舍弃对方的非冲突提交;两者常按文件的敏感程度搭配使用,逐文件处理时改用 checkout 更清晰。

同步上游后的复核动作

  • git diff HEAD^ --stat 看本次合并实际带入了哪些文件
  • 重点核对被覆盖的配置项与本地补丁是否仍有必要保留
  • 跑一次构建与关键用例,确认行为没有被上游改动带偏
  • 记录本次取舍,方便下次同步时快速回忆
本地定制部分若长期需要保留,更稳妥的做法是把它们抽成独立文件或开关,减少与上游在同一处的直接冲突,而不是每次靠取一侧解决。

易错点

  • 把 -X theirs 理解为「全部采用对方」会误判:只有冲突块取对方,你的非冲突改动仍会保留
  • 个性化配置或本地补丁被自动覆盖后不易察觉,高价值配置文件应小步合并并人工核对 diff
  • 在共享分支上使用前未与协作者确认,等于替他人决定了冲突的取舍
  • 用它同步上游后不跑测试,冲突区域的逻辑取错版本会直接带到线上
  • 长期依赖 -X theirs 跟随上游会不断丢掉本地定制,需要定期评审差异而不是一直取对方

数据来源与参考

  • Git 官方文档:git-merge(-X theirs)
  • Pro Git 2nd Edition · 7.8 高级合并
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌