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

How to rebase commits from another repository with a different history?

我们有两个 Git 存储库。

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

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

现在,我们想要合并两个存储库,以便我们在一个存储库中拥有完整的历史记录。有没有办法 "copy/rebase/something else" 所有提交 E..F 到 C?

这些是远程存储库吗?如果 C 和 F 都在同一个本地存储库中,那么您应该能够将指向 F 的分支变基到指向 C 的分支上。如果不行,试试这个:

  1. 在 Repo1 本地 运行
    一种。 git remote add repo2 <Repo 2 URL>
    b. git push repo2 branchPointingToC
  2. 然后在 Repo2 本地 运行
    一种。 git fetch
    b. git checkout branchPointingToF
    C。 git rebase -i remotes/origin/branchPointingToC

(N.B。如果你跟随 但想变基,你可以使用 git rebase -i repo2/master 代替他的 git cherry-pick。)

最简单的做法是添加 Repo 2 作为 remote in Repo 1 using its physical path on disk and then simply cherry pick 在 [= 之上提交 EF 16=].

所以,在 Repo 1 中你会做:

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

然后,假设 EFRepo 2 和 [=16= 中 master 分支中的最新两个提交] 是 Repo 1master 中的最新提交,如下所示:

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

你会做:

git checkout master
git cherry-pick repo2/master~2..repo2/master

这将在 C 之上应用提交 EF 的补丁:

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

请注意,我在这里挑选 提交范围 ,这是受支持的 since Git 1.7.2