如何让Git两分支特定目录独立追踪且仅合并指定文件?
让Git分支间指定目录独立追踪、拉取时不合并的方案
要实现你需要的效果——src/main.c在分支拉取时正常合并,config目录下的文件各自保留对应分支的版本、不触发合并操作,可以采用以下两种可行方法:
方法1:通过.gitattributes配置全局合并策略
这是长期需求的最优解,配置后仓库所有用户都能生效:
- 在仓库根目录创建
.gitattributes文件,写入以下规则:
该规则表示:当合并操作涉及config/** merge=oursconfig目录下的任意文件时,Git会始终保留当前分支的版本,完全忽略对方分支的相关变更。 - 将
.gitattributes提交并推送到所有分支:
完成后,在master和testing分支间执行拉取、合并操作时,git add .gitattributes git commit -m "Configure config directory to use 'ours' merge strategy" git pushconfig目录的文件会自动保留当前分支的版本,不会产生合并冲突,也不会被对方分支的文件覆盖。
方法2:用git update-index设置本地临时忽略
如果只是个人临时需求,不想修改仓库全局配置,可以使用此方法:
- 在master分支执行命令,标记该分支的config文件为「假设未修改」:
git update-index --assume-unchanged config/main.cfg - 在testing分支执行对应命令:
此设置仅对本地仓库生效,Git会忽略这些文件的版本差异(包括分支切换时的变更),但重新克隆仓库或切换分支后需要重新执行命令。git update-index --assume-unchanged config/test.cfg
注意事项
- 方法1是仓库级别的持久化配置,适合团队统一使用;
- 方法2是本地临时设置,仅适用于个人临时场景;
- 两种方法都不限制你手动修改
config目录的文件,仅在合并、拉取操作时阻止自动合并或覆盖。
内容的提问来源于stack exchange,提问作者dronus
相关产品推荐
相关产品推荐

