复制存储库之间的提交链

时间:2013-12-06 14:52:08

标签: git svn version-control patch git-commit

如何将一系列提交从一个git(或svn)存储库复制到另一个?

如果我只做一次提交,我会这样做:

 cd Git1
 git diff commitHash^ commitHash > patch.txt
 cd Git2
 git branch CommitsFromGit1
 git checkout CommitsFromGit1
 patch -i ....Git1/patch.txt
 git ci -am "CommitFromGit1Name"

但我有太多提交要一个接一个地手动进行。有没有办法创建一些多补丁,有一组提交更改?

1 个答案:

答案 0 :(得分:4)

让我们打电话给你的G和A,并说你在主分支上工作。在git A中,将B添加为远程并将其内容提取到A:

git remote add B /path/to/B
git fetch B

(您不必将其添加为遥控器;如果您愿意,可以执行git fetch /path/to/B master:B/master。这会复制B中的所有分支,在您的情况下可能是不必要的。请随意指定明确的refspec限制获取。)

现在,您可以使用git-cherrypick将单个提交从B复制到A,或使用git rebase --onto复制多个提交。后一种命令具有以下一般形式:

git rebase --onto destination boundary starting_point

Git从starting_point向后走,直至到达boundary,并将结果提交(boundary除外)复制到destination的提示上。因此,这会将B的主分支中最近提交的三个提交复制到A的主分支:

git rebase --onto master B/master~3 B/master