我有两个存储库old_repo
和new_repo
。
old_repo
有10次提交。
new_repo
有20个提交。
new_repo
的所有提交日期都晚于old_repo
的日期。
我想将old_repo
的10次提交放在new_repo
的开头,以使最终的回购包含30次提交,其顺序与最初创建时的顺序相同。
有什么可能的方法。
我能想到的一种显而易见且令人厌烦的方法是挑选樱桃,并将old_repo
的每次提交都逐个追加到new_repo
上。
寻找更好的建议。
PS:在第10次提交和第11次提交之间的文件更改不应该是剧烈的,因为它们曾经是相同的仓库,但是.git
文件夹被意外删除,这破坏了提交顺序。
答案 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