如何从另一个具有不同历史记录的存储库中重新提交提交?

时间:2016-06-07 08:06:10

标签: git version-control merge rebase

我们有两个Git存储库。

回购1.提交:A,B,C。此存储库是根据SVN历史记录创建的。

Repo 2.提交:D,E,F。这个存储库是在没有SVN历史的情况下创建的,只是使用了工作副本(作为提交C),它变成了提交D.换句话说,提交的文件树C和D是相同的。

现在,我们要合并两个存储库,以便在一个存储库中拥有完整的历史记录。有没有办法将所有提交E..F“复制/改组/其他”复制到C?

2 个答案:

答案 0 :(得分:7)

最简单的方法是使用物理路径 Repo 1 中将 Repo 2 添加为remote磁盘然后只需cherry pickE之上提交FC

所以,在 Repo 1 中你会这样做:

git remote add repo2 C:\Path\To\Repo2
git fetch repo2

然后,假设EF 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之上应用来自提交FC的修补程序:

           master
          /
A-B-C-E'-F'
      repo2/master
     /
D-E-F

请注意,我在这里采摘提交,支持since Git 1.7.2

答案 1 :(得分:1)

这些远程存储库吗?如果C和F都位于同一本地存储库中,那么您应该能够将指向F的分支重新绑定到指向C的分支上。如果不是,请尝试:

  1. 当地在Repo1中运行
    一个。 git remote add repo2 <Repo 2 URL>
    git push repo2 branchPointingToC
  2. 然后在Repo2中本地运行
    一个。 git fetch
    git checkout branchPointingToF
    C。 git rebase -i remotes/origin/branchPointingToC
  3. (N.B。相反,如果你跟着Enrico's answer,但想要改变,你会使用git rebase -i repo2/master代替他的git cherry-pick