Git单分支忽略文件的正确流程及git checkout --ours失效排查
问题解答
1. 实现单分支忽略文件夹的正确Git工作流
有两种可靠方案,可根据需求选择:
方式一:使用本地忽略文件(推荐,无版本控制冲突)
Git提供了本地专属的忽略配置文件.git/info/exclude,该文件不会被提交到远程仓库,仅作用于当前本地仓库。操作步骤:
- 切换到
development分支,打开仓库根目录下的.git/info/exclude文件(无则创建) - 添加一行
jsonFolder/,保存后即可在当前分支忽略该文件夹,且完全不影响其他分支 - 无需执行
git rm --cached或修改.gitignore,远程仓库的development分支不会留下任何忽略该文件夹的变更,合并到main时也不会触发删除操作
方式二:维护分支专属的.gitignore(适合需要同步分支忽略规则的场景)
如果需要让其他开发人员的development分支也忽略该文件夹,可通过版本控制的.gitignore实现,但需处理合并冲突:
- 在
development分支:- 执行
git rm --cached jsonFolder(仅移除Git追踪,保留本地文件) - 修改
.gitignore,添加jsonFolder/ - 提交变更:
git commit -m "Ignore jsonFolder in development"
- 执行
- 合并到
main分支时:- 执行
git merge development,若.gitignore出现冲突,用git checkout --ours .gitignore选择main分支的.gitignore版本 - 若合并时Git自动应用了
development的.gitignore,直接执行git checkout main -- .gitignore恢复main的忽略规则 - 恢复被删除的文件夹:
git restore --source=HEAD~1 jsonFolder(从合并前的HEAD版本恢复) - 最后提交恢复状态:
git commit -m "Restore jsonFolder in main"
- 执行
2. 为什么git checkout --ours .gitignore没有生效?
这个命令仅在合并冲突阶段有效——只有当合并时.gitignore文件被标记为冲突状态(两个分支对.gitignore的修改无法自动合并),执行它才会选择当前分支(main)的版本。
你遇到的情况应该是:合并时Git自动将development分支的.gitignore变更(添加jsonFolder/)合并到了main的.gitignore里,未触发冲突。此时.gitignore已是修改后的状态,git checkout --ours .gitignore会检测到当前工作区和索引的.gitignore与main分支的目标版本一致,因此提示Updated 0 paths from the index。
这种情况下,正确的恢复命令是直接从main分支拉取原版本:git checkout main -- .gitignore
内容的提问来源于stack exchange,提问作者Sequoya
相关产品推荐
相关产品推荐

