简答
您可以使用cherry-pick 命令将已经存在的提交应用到另一个分支,然后使用git push origin branchA branchB 推送两个分支。
为什么在两个分支中推送一个提交可能很有用
假设您有一个具有这种结构的存储库:
A--B--C--D ← master ← HEAD
\--E ← v1-release
经过一些开发(提交A,B,C)项目发布并创建了v1-release分支(这样v1可以支持错误修复,下一个版本可以在master开发) .提交E 用于指定版本信息(添加的发行说明等)。提交D引入了新功能,计划在下一个版本中出现,不应出现在v1-release中。
现在,如果在v1-release中发现了一个bug,必须在两个分支中修复它,这样用户才能继续使用v1,并且它不会出现在下一个版本中。
修复master 中的错误后,存储库应如下所示:
A--B--C--D--F ← master ← HEAD
\--E ← v1-release
现在必须将带有错误修复的提交 F 应用于 v1-release 分支。
实际操作方法
不能完全复制提交(因为提交是目录保存状态),但您可以将提交中所做的更改应用到另一个提交。
cherry-pick 命令正是这样做的。它将指定提交所做的更改应用于当前分支,创建新提交:
git checkout v1-release
git cherry-pick F
在此之后,存储库应如下所示:
A--B--C--D--F ← master
\--E--G ← v1-release ← HEAD
提交G 引入了与F 相同的更改。
您可能必须解决冲突(就像合并后一样)。
错误信息
之前的樱桃采摘现在是空的......
表示由cherry-picked 提交所做的更改已经存在于当前分支中。您可能忘记签出正确的分支。
如果出现错误或冲突,可以使用git cherry-pick --abort 中止cherry-pick。
最后,您可以返回master 分支并将两个分支推送到远程存储库:
git checkout master
git push origin master v1-release
最终的存储库结构:
A--B--C--D--F ← master ← HEAD
\--E--G ← v1-release