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

原远程仓库已失效的两个Git仓库如何双向同步并合并提交历史

Git 双仓库双向同步线性历史操作方案

问题背景

现有两台新服务器,其上的Git仓库均克隆自已下线的旧服务器,初始版本为r1,两台服务器后续各自产生了独立提交,形成分叉历史:

r1 - 旧服务器上的初始版本
       /                      \
r1 - 克隆到新服务器1      r1 - 克隆到新服务器2
      |                        |
     r2                       r4
      |                        |
     r3                       r5

注:如果你的仓库默认分支名为master,把后续命令中的main替换为master即可。

预期效果

调整后两台服务器仓库可直接执行push/pull实现双向同步,提交历史保持线性,最终统一结构如下:

r1 - r2 - r3 - r4 - r5

操作步骤

以下操作基于你提供的复现环境(tmpA对应新服务器1,tmpB对应新服务器2)执行,可直接对应到实际服务器操作:

步骤1:清理无效远程配置,互相设置为默认源

在tmpA(新服务器1)执行:

# 删除指向旧服务器的无效origin
git remote remove origin
# 将已添加的另一台服务器远程重命名为origin,作为默认同步源
git remote rename tmp_b origin
# 绑定本地main分支的上游为远程origin的main分支
git branch --set-upstream-to=origin/main main

在tmpB(新服务器2)执行:

git remote remove origin
git remote rename tmp_a origin
git branch --set-upstream-to=origin/main main

步骤2:变基合并提交,形成线性历史

我们以先保留服务器1的全部提交、再追加服务器2的提交为例:

在tmpB(新服务器2)执行:

# 拉取服务器1的最新提交
git fetch origin
# 将本地提交变基到服务器1提交的末尾,保证历史线性
git rebase origin/main

如果变基过程中出现文件冲突,手动修改冲突文件后执行git add <冲突文件名>,再执行git rebase --continue即可完成变基。

推送合并后的线性历史到服务器1

变基完成后tmpB的提交历史已经是预期的线性结构,直接推送到服务器1即可完成同步:

git push origin main

步骤3:服务器1拉取最新内容完成同步

在tmpA(新服务器1)执行:

git pull

后续使用规范

后续两台服务器开发时,遵循以下流程即可一直保持线性历史双向同步:

  • 每次开始修改代码前,先执行git pull拉取对方的最新提交
  • 本地修改完成后commit,再执行git push推送到对方仓库

如果push时提示提交冲突,说明对方有未同步的新提交,先执行git pull --rebase合并内容后再push即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:36:02