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

自定义合并驱动:keep-ours

对版本号、锁文件等总是「保留当前分支」的文件类型,可在 .gitattributes 里绑定自定义 merge 驱动,让合并自动保留本地版本。

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

keep-ours 合并驱动是什么

对版本号文件、锁文件、生成物等「合并时永远保留当前分支」的文件类型,可以在 .gitattributes 里绑定自定义合并驱动,让 Git 遇到冲突时自动选择本地版本,不再人工处理。驱动本体是一段命令,由 merge.<名称>.driver 配置;最简单的驱动是 true:命令直接成功,结果保留当前分支文件(%A)。

基本信息

用途指定文件类型合并时自动保留一侧
配置merge.<名称>.driver 定义命令;.gitattributes 引用
适用文件版本文件、锁文件、生成物
占位符%O 共同祖先、%A 当前分支(结果写回)、%B 对方分支、%P 路径
局限静默丢弃对方改动,仅限「本地必赢」清单

典型使用场景

  • 锁文件:依赖锁再生成本低,保留本地后重新生成即可。
  • 版本号文件:合并时永远取目标分支的版本号。
  • 生成物:构建产物以本地为准,防止旧产物覆盖新结果。
  • 本地配置样例:每位开发者各自维护的样例文件。
  • 噪声治理:把最常冲突的文件先压下去,减少人工解决量。
  • 多环境配置:按环境保留各自的值,合并时不互相覆盖。

配置示例

配置示例
git config merge.keepours.driver true          # 最简驱动:永远成功,保留当前分支
printf 'VERSION merge=keepours\n' >> .gitattributes   # 绑定文件类型
# 需要复杂逻辑时换脚本:%O 共同祖先 %A 当前分支(结果写回) %B 对方 %P 路径
git config merge.keepours.driver 'sh scripts/merge-keepours.sh %O %A %B %P'

配置要素

要素说明注意
驱动名自定义标识配置与 .gitattributes 两处一致
命令处理并写回 %A简单场景用 true 即可
绑定文件模式 merge=名称每类文件单独一行
分发驱动脚本随仓库提供未配置的机器行为不同
自动保留会让对方在该文件的改动静默消失,只用于「本地必赢」的特定文件,并在评审中说明;把逻辑文件误配进来等于丢代码。

易错点

  • 驱动命令每台机器各自执行,配置没同步行为不一致;驱动脚本随仓库分发并写清安装步骤。
  • 把源码或逻辑文件误配成保留一侧会静默丢改动;配置前逐项核对文件清单。
  • 用 true 当驱动后本地永远「已解决」,评审者看不到双方差异;关键文件不要这样做。
  • 新克隆只带 .gitattributes、不带 config 里的驱动定义,行为与老机器不同;用初始化脚本统一安装驱动。

数据来源与参考

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