# 在仓库之间复用提交

如果你有两个仓库 A 和 B,现在有个需求要在这两个仓库上完成,最简单的方法是在两个仓库中分别进行开发和提交,但更简单的是我们可以在一个仓库中开发,然后在另一个仓库中直接复用。

# cherry-pick

要想实现提交复用最先想到的就是 cherry-pick 命令,它可以将指定的提交(commit)应用于其他分支:

git cherry-pick <commit>

如上,它会将指定的提交应用到当前分支上,然后产生一个新的提交,就像是将其中的内容在当前工作区进行添加和提交一样。

如果想要同时复用多个提交,可以直接在后面继续添加,每个提交之间用空格隔开:

git cherry-pick <commitA> <commitB>

如上,这将会将 commitA 和 commitB 对应的提交都应用在当前分支上。

如果要引用两个提交之间的所有提交,则可以使用下面的语法:

git cherry-pick <commitA>..<commitB>

这里的 A 应该早与 B 提交,而且应用时是不包含 A 的。你也可以通过下面的语法来包含 A 提交:

git cherry-pick <commitA>^..<commitB>

# 跨仓库复用

现在已经可以在一个仓库中进行复用了,那么跨仓库呢?方式其实差不多的,我们只需要拿到另一个仓库的提交就可以了。

假设我们现在在 A 仓库中,想要引用 B 中的提交,那么就把 B 中的修改推送到远程,然后将 B 对应的远程仓库地址也在 A 中库中进行添加。

git remote add origin_b https://repository_B_URL

接着我们就可以将在 B 仓库中需要应用的提交拉取下来,假设其提交在 branch_b 分支上:

git fetch origin branch_b
git checkout -b branch_b origin/branch_b

最后复用就跟在单仓库中一样了:

git cherry-pick branch_b

试试看吧。