如何保留development分支内的特定文件且不合并到master分支?
仅允许指定文件存在于开发分支、禁止合并到生产分支的实现方案
方法1:使用.gitattributes配置合并排除规则(本地自动生效,适合个人项目)
- 先在开发分支提交你需要保留的文件(比如sqlite数据库文件)
- 在开发分支根目录创建
.gitattributes文件,添加如下规则,多个文件可换行追加:
db.sqlite3 merge=ours *.dev.conf merge=ours
- 在本地Git配置中开启ours合并驱动,所有协作者都需要执行一次该命令:
git config --global merge.ours.driver true - 切换到生产分支,手动删除一次上述需要排除的文件并提交:
git rm db.sqlite3 && git commit -m "清理生产分支不需要的开发文件" - 后续从开发分支合并代码到生产分支时,Git会自动保留生产分支的状态,不会将开发分支的上述文件合并进来。
方法2:CI/CD校验拦截(仓库级强制生效,适合团队协作)
这是最稳妥的方案,不会因为本地配置遗漏导致规则失效:
- 在GitHub仓库中配置 Actions 工作流,触发条件设置为所有向生产分支发起的PR触发执行
- 工作流中添加校验逻辑,扫描PR的变更文件列表,一旦命中禁止进入生产分支的文件清单,直接将校验状态标记为失败
- 开启生产分支的保护规则,要求PR必须通过校验才能合并,完全杜绝不符合要求的文件进入生产分支。
方法3:手动合并控制(适合临时少量合并场景)
- 合并开发分支到生产分支时添加
--no-commit参数,让合并流程停留在提交前的状态:git merge dev --no-commit --no-ff - 手动移除本次合并带入的不需要的生产分支文件:
git rm --cached db.sqlite3 - 确认所有变更符合生产分支要求后,再执行提交操作完成合并。
注意:不要将这类文件添加到.gitignore规则中,.gitignore是全局生效的,添加后开发分支也无法正常追踪提交这些文件,不符合需求。
内容的提问来源于stack exchange,提问作者AlexisLP
相关产品推荐
相关产品推荐

