我们有两个Git存储库。
回购1.提交:A,B,C。此存储库是根据SVN历史记录创建的。
Repo 2.提交:D,E,F。这个存储库是在没有SVN历史的情况下创建的,只是使用了工作副本(作为提交C),它变成了提交D.换句话说,提交的文件树C和D是相同的。
现在,我们要合并两个存储库,以便在一个存储库中拥有完整的历史记录。有没有办法将所有提交E..F“复制/改组/其他”复制到C?
答案 0 :(得分:7)
最简单的方法是使用物理路径在 Repo 1 中将 Repo 2 添加为remote磁盘然后只需cherry pick在E
之上提交F
和C
。
所以,在 Repo 1 中你会这样做:
git remote add repo2 C:\Path\To\Repo2
git fetch repo2
然后,假设E
和F
是 Repo 2 中master
分支中最近的两次提交,C
是最新的提交在 Repo 1 的master
中,如下所示:
master
/
A-B-C
repo2/master
/
D-E-F
你会这样做:
git checkout master
git cherry-pick repo2/master~2..repo2/master
将在E
之上应用来自提交F
和C
的修补程序:
master
/
A-B-C-E'-F'
repo2/master
/
D-E-F
请注意,我在这里采摘提交,支持since Git 1.7.2。
答案 1 :(得分:1)
这些远程存储库吗?如果C和F都位于同一本地存储库中,那么您应该能够将指向F的分支重新绑定到指向C的分支上。如果不是,请尝试:
git remote add repo2 <Repo 2 URL>
git push repo2 branchPointingToC
git fetch
git checkout branchPointingToF
git rebase -i remotes/origin/branchPointingToC
(N.B。相反,如果你跟着Enrico's answer,但想要改变,你会使用git rebase -i repo2/master
代替他的git cherry-pick
。