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

Git拉取上游更新如何排除指定文件 是否需保留源提交历史

问题答复

1. 拉取源仓库上游更新不需要保留源项目完整提交历史

你执行rm -rf .git后重新初始化仓库的操作,直接抹除了本地仓库和上游源仓库的共同提交祖先,才会触发fatal: refusing to merge unrelated histories报错。同步上游更新完全不需要引入源仓库的全量提交历史,使用浅拉取+临时分支中转的方案,仅拉取上游最新版本的文件快照即可完成同步,本地仓库只会保留你自己的提交记录,不会有冗余的上游历史。

2. 拉取上游更新时保护自定义文件/目录的操作步骤

不要直接执行git pull upstream master将上游代码直接合并到你的工作主分支,按以下流程操作即可避免自定义内容被覆盖,同时不会引入冗余历史:

  • 配置上游远程仓库的浅拉取规则
    如果你已经添加了upstream远程源,执行拉取时加--depth=1参数,仅拉取上游最新一次提交的文件快照,不同步所有历史提交:
    git fetch upstream --depth=1
    
  • 将拉取到的上游最新代码检出到独立临时分支,避免直接改动当前工作区:
    git checkout -b upstream-temp FETCH_HEAD
    
  • 切回自己的工作主分支(默认分支名通常是master或main,按你实际的分支名替换即可),先同步上游全量文件,再恢复你需要保留的自定义内容:
    git checkout master
    git checkout upstream-temp -- .
    git restore --staged --worktree README.md content/
    
    上述命令中最后一行的路径可以按需替换,所有你不想被上游覆盖的文件、目录都可以加在后面,执行后这些路径下的内容会完全保留你本地的修改版本,不会被上游内容替换。
  • 确认其余从上游同步的文件无异常后,正常提交变更、清理临时分支即可:
    git commit -m "sync upstream latest update"
    git branch -D upstream-temp
    

补充说明

如果你之前已经通过--allow-unrelated-histories参数把上游全量历史合并到了本地仓库,可以执行以下操作清理冗余历史,不会丢失你当前的代码修改:

git checkout --orphan clean-branch
git commit -m "init with current working status"
git branch -D master
git branch -m master

之后按上述流程同步上游即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:57:11