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

如何创建新Git仓库替代旧仓库、保留提交历史且可同步旧仓库更新

Git非复刻单向同步操作方案

最优初始操作步骤

避免直接污染原有旧仓库的配置,推荐用独立的中转裸仓库完成同步,全程不会在两个远程仓库之间产生平台层面的复刻关联:

  • 首先在新的Git托管端创建空的new_repo,获取新远程地址new_remote(如ssh://my_host/new_repo)
  • 本地创建同步中转裸仓库:
# 克隆旧仓库完整内容到本地裸仓库
git clone --bare <old_remote地址/old_repo.git> sync_workdir
cd sync_workdir
# 添加新仓库为推送目标远程
git remote add new <new_remote地址/new_repo.git>
# 首次全量推送所有分支、标签、提交历史到新仓库
git push --mirror new

后续旧仓库更新同步方法

每次需要把旧仓库的更新同步到新仓库时,仅需要在中转目录执行两行命令即可:

# 拉取旧仓库的所有最新更新
git fetch origin
# 将更新全量推送到新仓库,单向同步不会反向修改旧仓库
git push --mirror new

针对你当前已有操作的适配方案

如果你已经按自己写的步骤完成了初始推送,可直接在本地的new_repo克隆目录配置同步规则:

  • 进入本地new_repo目录,添加旧仓库为只读上游:
cd /path/to/new_repo
# 添加旧仓库远程,命名为old_upstream
git remote add old_upstream <old_remote地址/old_repo.git>
# 配置该远程禁止推送,避免误操作修改旧仓库
git remote set-url --push old_upstream no_push
  • 每次需要同步更新时执行以下命令:
# 拉取旧仓库最新更新
git fetch old_upstream
# 切换到对应分支(以master为例)
git checkout master
# 合并旧仓库的对应分支更新,单向同步默认是快进合并无冲突
git merge old_upstream/master --ff-only
# 推送到新仓库远程
git push origin master

核心说明

该方案下新旧两个远程仓库不存在任何平台层面的复刻关联,仅通过本地中转完成单向同步,完全满足你不想要复刻、仅允许旧仓库更新同步到新仓库的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:54:02