首页/开发/Git 与协作速查/自定义合并驱动:union 并集合并
合并变基与冲突71 条

自定义合并驱动:union 并集合并

union 驱动把双方新增行都保留,适合变更日志、清单等「累加式」文本;在 .gitattributes 中对目标文件启用 merge=union。

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

自定义合并驱动 union 是什么

union 驱动把合并双方的改动都保留(取并集),适合变更日志、作者名单等「累加式」文本:在 .gitattributes 里对目标文件配置 merge=union 后,这类文件不再产生人工冲突。它只保证不冲突,不保证顺序与语义正确,用错地方会产出坏数据。

基本信息

用途双方改动取并集,无需人工解决冲突
配置.gitattributes 中写 <模式> merge=union
典型文件CHANGELOG、AUTHORS、名单类文本
验证git check-attr merge -- CHANGELOG.md
生效范围属性随仓库分发,所有克隆方均生效
局限不理解语义,重复行与顺序问题都会保留

典型使用场景

  • 变更日志:多个分支各加一节,合并时自动保留双方记录。
  • 作者名单:新贡献者追加互不冲突,减少无意义的解冲突。
  • 白名单与清单:天然追加型文件,重复行可由脚本去重。
  • 多分支并行调研:交替编辑同一列表时避免手工合并。
  • 自动化流程:机器人提交的追加型文件用 union 降低冲突率。
  • 文档草稿:多人同时往同一节追加意见时先自动保留,再由编辑整理。
  • 模板类文件:双方各加段落的场景可用(仍需事后整理顺序)。

配置示例

配置示例
printf 'CHANGELOG.md merge=union
AUTHORS merge=union
' >> .gitattributes
# 写入属性后提交,让规则随仓库分发
git check-attr merge -- CHANGELOG.md   # 校验属性是否生效
git merge feature-a                    # 合并时目标文件取并集
# 合并后仍要检查重复行与顺序是否符合阅读习惯

合并方式对照

方式行为适用
普通合并冲突则停下等人工处理一般源码文件
merge=union双方改动全部保留追加型文本
merge=ours忽略一侧保留一侧锁定文件与生成物
自定义驱动按脚本逻辑决定结果结构化格式的特殊处理
union 只保证「不冲突」,不保证顺序与语义正确;用于有序或去重敏感文件(如 JSON/YAML)会产出坏数据,仅限天然追加型文本。

易错点

  • 并集结果可能重复或顺序颠倒,合并后仍要人工整理一次,别把自动合并当成最终稿。
  • 对结构化文件(JSON/YAML/配置文件)使用 union 极易产生无法解析的内容,只用于纯文本追加场景。
  • 把 union 用在有删除语义的文件上:一方删除的行会被另一方保留下来,数据清理意图落空。
  • 属性只在本仓库生效,克隆方拉到之后才享受该规则,旧克隆不更新属性就不会应用。

数据来源与参考

  • Git 官方文档:gitattributes(union 内置驱动)
  • Pro Git 2nd Edition · 8.2 Git 属性
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌