如何将一系列提交从一个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"
但我有太多提交要一个接一个地手动进行。有没有办法创建一些多补丁,有一组提交更改?
答案 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