在存储库之间复制提交链

klm*_*123 2 svn git 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"
Run Code Online (Sandbox Code Playgroud)

但我的提交太多,无法一一手动进行。有没有办法创建某种带有一组提交更改的多补丁?

Mag*_*äck 6

让我们将您的 git 称为 A 和 B,并假设您正在 master 分支上工作。在 git A 中,将 B 添加为远程并将其内容提取到 A 中:

git remote add B /path/to/B
git fetch B
Run Code Online (Sandbox Code Playgroud)

(您不必将其添加为远程;git fetch /path/to/B master:B/master如果您愿意,您可以这样做。这会复制 B 中的所有分支,这在您的情况下可能是不必要的。请随意指定显式的 refspec 来限制获取。)

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

git rebase --onto destination boundary starting_point
Run Code Online (Sandbox Code Playgroud)

Git 向后行走,starting_point直到到达boundary并将生成的提交(不包括boundary)复制到 的顶端destination。因此,这会将最近的三个提交从 B 的 master 分支复制到 A 的 master 分支:

git rebase --onto master B/master~3 B/master
Run Code Online (Sandbox Code Playgroud)