如何在Git同步上游仓库(Fetch Upstream)时排除指定文件夹
嘿,这个需求我之前帮人处理过,刚好能给你一套靠谱的方案!你要保留snippets/frameworks/django/的自定义内容,同时同步上游其他所有更新,核心思路就是用Git的合并策略精准控制特定文件夹的版本,具体操作步骤如下:
1. 先确认上游仓库已添加(没加的话先补上)
首先得把上游源仓库关联到你的本地仓库,这样才能拉取它的更新:
# 替换成上游仓库的实际URL git remote add upstream https://github.com/上游用户名/上游仓库名.git # 验证关联是否成功,会显示upstream的fetch和push地址 git remote -v
2. 拉取上游的最新更新
先把上游的所有分支更新拉到本地,这一步不会直接修改你的本地代码,只是获取最新内容:
git fetch upstream
3. 分两步合并:先保护目标文件夹,再同步其余内容
这里是关键操作,我们要分两次合并,确保目标文件夹的自定义内容不被覆盖:
# 先切换到你的本地主分支(如果不在的话) git checkout main # 第一步:专门针对目标文件夹,使用ours策略合并,强制保留你的本地版本 git merge -X ours upstream/main -- snippets/frameworks/django/ # 第二步:正常合并上游的其余所有内容,该同步的同步 git merge upstream/main
解释下:第一条merge命令告诉Git,当snippets/frameworks/django/文件夹内出现冲突时,直接用你本地的自定义版本;第二条merge命令处理剩下的所有文件,按照正常的Git合并逻辑同步上游更新。
4. 处理非目标文件夹的冲突(如果有)
如果除了目标文件夹外,其他文件出现合并冲突,Git会提示你手动解决。解决完冲突后,执行以下命令标记冲突已处理:
git add <冲突文件名> git commit
5. 推送到你的Fork仓库
最后把合并后的本地代码推送到你的远程Fork仓库即可:
git push origin main
省心技巧:长期自动保留目标文件夹
如果你不想每次同步都手动执行上面的merge命令,可以在仓库根目录创建一个.gitattributes文件,添加以下内容:
snippets/frameworks/django/ merge=ours
保存后,以后每次合并上游更新时,Git会自动对这个文件夹应用ours策略,直接保留你的自定义版本,省去重复操作。
内容的提问来源于stack exchange,提问作者Ali Aref
相关产品推荐
相关产品推荐

