我如何将不相关的历史作为一系列新提交推送?

How can I push an unrelated history as a series of new commits?

我有两个独立的远程存储库,RemoteOld 和 RemoteNew。

远程旧
网址:http://RemoteOld
分支机构: A--B--C--D--E 大师

远程新建
网址:http://RemoteNew
分支机构: A'--B'大师

我想从 RemoteOld 获取所有提交并将它们添加到 RemoteNew,这样 RemoteNew 看起来像这样:

远程新建
分支机构: A'--B'--A--B--C--D--E 大师

RemoteNew/master 中的提交 A 应该有效地删除 RemoteNew 中的所有文件,并将它们替换为提交 A 中 RemoteOld/master 的快照中的文件。提交 B-E 在 RemoteOld 和 RemoteNew 之间应该相同.我需要在不使用强制推动的情况下执行此操作。

您必须将 RemoteOld/master 变基到 RemoteNew/master。由于两个分支的名称相同,您需要临时重命名一个分支:

  1. 克隆 RemoteOld:

     git clone http://RemoteOld
     cd FolderCreatedByClone
    
  2. 添加 RemoteNew。您可以删除 RemoteOld,因为它不会再被使用:

    git remote add RemoteNew http://RemoteNew
    git remote rm origin
    
  3. 将 RemoteOld/master 重命名为其他名称,例如 masterOld。从新的来源获取主分支。然后运行git branch -a查看所有分支:

    git branch -m masterOld
    git fetch RemoteNew
    git branch -a
    

输出:

 *masterOld
 remotes/RemoteNew/master       
  1. 将 masterOld 变基到 RemoteNew/master:

     git rebase --onto master masterOld
    
  2. 此时 masterOld 会变成你想要 RemoteNew/master 的样子,所以只需将 masterOld 合并到 RemoteNew/master.

    git checkout master
    git merge masterOld
    
  3. 推送 RemoteNew/master。可以删除旧的master分支。

    git branch -d masterOld
    git push