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