You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过.gitattributes在Git分支合并时让指定文件保持不变?

解决Git合并时保留特定分支文件的问题

问题根源

你当前的方案存在两个核心问题:

  • merge=ours 驱动仅在两个分支都修改了目标文件导致冲突时才会触发,如果只有单分支修改文件,Git会直接采用修改后的版本,不会执行驱动逻辑。
  • git merge -s ours 是全局合并策略,会让所有文件都保留当前分支版本,完全覆盖了其他文件的合并需求。

可行解决方案

方案一:合并后手动恢复目标文件(简单直接)

适合偶尔合并的场景,操作步骤清晰可控:

# 合并dev分支,不自动提交合并结果
git merge dev --no-commit

# 用当前分支(main)的版本覆盖指定文件
git checkout HEAD -- Project/appsettings.json Project/Program.cs

# 完成合并提交
git commit -m "Merge dev into main, retain appsettings.json and Program.cs from main"

如果是从dev分支合并main分支,想保留dev的特定文件,操作逻辑一致:

git merge main --no-commit
git checkout HEAD -- Project/appsettings.json Project/Program.cs
git commit -m "Merge main into dev, retain appsettings.json and Program.cs from dev"

方案二:配置自定义合并驱动(自动处理)

适合频繁合并的场景,配置一次后自动生效:

  1. 配置自定义合并驱动,让指定文件始终采用当前分支版本:
git config merge.keepours.driver "git checkout HEAD -- %f"
  1. 更新.gitattributes文件,绑定目标文件到该驱动:
echo 'Project/appsettings.json merge=keepours' >> .gitattributes
echo 'Project/Program.cs merge=keepours' >> .gitattributes
  1. 提交配置并同步到所有分支:
git add .gitattributes
git commit -m "Set keepours merge driver for branch-specific files"
git push origin main

git checkout dev
git merge main
git push origin dev

后续合并分支时,这两个文件会自动保留当前分支的版本,其他文件正常执行合并逻辑。

内容的提问来源于stack exchange,提问作者Johnny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 15:56:15