首页/开发/Git 与协作速查/git merge -X ours 冲突块取本分支
合并变基与冲突71 条

git merge -X ours 冲突块取本分支

双方改到同一区域时,自动选择当前分支一侧的内容而不报冲突;未冲突部分照常合并,是「以我为主」的产线救急手段。

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

merge -X ours 是什么

git merge -X ours 在合并时告诉 Git:凡是双方改到同一区域产生的冲突,直接采用当前分支(ours)一侧的内容,不报冲突;其余未冲突的改动照常并入。它属于合并策略的辅助选项(-X 后面跟策略选项),不是 -s ours 那种「整体取我方」的语义。典型用途是产线上的紧急处理:让某个长期定制分支保持自己的版本,同时吃进上游的其余更新。

基本信息

用途冲突块自动采用当前分支版本
语法git merge -X ours <分支>
作用范围仅冲突区域取我方,非冲突改动照常合并
单文件写法git checkout --ours -- <文件>
平台任意 Git 客户端

典型使用场景

  • 长期定制分支需要吸收上游更新,但关键配置必须保留本地版本
  • 发布收尾阶段先让主干通过构建,细节冲突稍后统一处理
  • 合并自动生成的文件(锁文件、快照)时,用我方版本避免无意义冲突
  • 把上游模板更新并入已有定制项目,保留本地个性化部分
  • 紧急恢复时快速得到一个可运行版本,事后再人工校正
  • 逐文件处理时只对个别文件采用我方版本

常用示例

常用示例
git switch main
git merge -X ours release/hotfix     # 冲突块取当前分支
git log --stat -1                    # 查看合并结果
git diff HEAD^ --stat                # 复核被带入的改动

仅对单个文件取我方

仅对单个文件取我方
git merge upstream/main              # 先正常合并,产生冲突
git checkout --ours -- config/app.yaml
git add config/app.yaml
git commit

几种「取我方」的区别

写法含义
-X ours仅冲突块取我方,非冲突内容仍会并入
-s ours整体忽略对方内容,只记录一次合并关系
checkout --ours对指定文件取出我方版本,常用于逐文件处理
自动取一侧只解决文本冲突,会静默丢弃对方在冲突区域内的修改;合并后务必 diff 复核,它适合紧急恢复而不是日常流程。

易错点

  • 把 -X ours 当成 -s ours 使用会误判合并结果,前者不会丢弃对方的非冲突提交,两者语义差别很大
  • 用它处理配置或锁文件冲突后容易忘记复核,建议合并后跑一次 git diff HEAD^ 检查被忽略的改动
  • 在共享分支上自动丢弃对方改动可能引发责任纠纷,涉及他人改动时应逐处确认后再合并
  • 自动取一侧后直接提交而不跑测试,冲突区域的逻辑可能已被选错版本,必须回归验证
  • 长期用 -X ours 吸收上游会造成定制分支与上游持续背离,需要定期评审差异而非一直取我方

数据来源与参考

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