顺序合并两个仓库的提交

时间:2019-07-20 00:34:16

标签: git github

我有两个存储库old_reponew_repoold_repo有10次提交。 new_repo有20个提交。 new_repo的所有提交日期都晚于old_repo的日期。 我想将old_repo的10次提交放在new_repo的开头,以使最终的回购包含30次提交,其顺序与最初创建时的顺序相同。 有什么可能的方法。

我能想到的一种显而易见且令人厌烦的方法是挑选樱桃,并将old_repo的每次提交都逐个追加到new_repo上。 寻找更好的建议。

PS:在第10次提交和第11次提交之间的文件更改不应该是剧烈的,因为它们曾经是相同的仓库,但是.git文件夹被意外删除,这破坏了提交顺序。

1 个答案:

答案 0 :(得分:3)

  

我想在old_repo的开头添加10个commit到new_repo的开头,以使最终的repo包含30个提交,它们的创建顺序与原始创建的顺序相同。

Git提交是graph,这意味着可以通过多种方式来解释提交的顺序。按日期。或“拓扑”。保留它们的创建顺序意味着日期顺序,但是在Git中实际上并不那么重要。


您有两个选择:合并或重新设置它们。选择哪种取决于您想要的结果。

在任何一种情况下,都将old_repo设为new_repo的远程目录,以便存储库可以互相看到。

git remote add old_repo <path or url to old_repo>
git fetch old_repo

合并

old_repo/master合并到new_repo的master中。

git checkout master
git merge --allow-unrelated-histories old_repo/master

正常解决冲突。这样就完成了。现在,两个仓库的历史记录已合并。如您所见,“日期顺序”并不重要。 历史记录中保留的原始两个分支

O1 ...  O8 - O9 - O10
                     \
                      M [master]
                     /
N1 ... N18 - N19 - N20 

变基

这就像樱桃在new_repo之上挑选old_repo的每个提交一样,但是Git可以为您做到这一点。

git checkout master
git rebase old_repo/master

这将在old_repo的master分支之上重播new_repo的master分支上的所有提交。您将获得30个提交的一个分支。 没有证据表明它们曾经是两个不同的存储库

O1 ... O9 - O10 - N1 - N2 ... N20 [master]

无论哪种情况,都可以安全地将远程站点删除到旧仓库。

git remote rm old_repo