用Git推送两个分支的提交

我如何在两个分支中推送提交?

我不能使用“混帐推”,因为它然后推到三个分支,我只是想在其中两个提交..

我曾经在分支B尝试过“git merge HEAD –commit id from branch A–”,但是它接受了分支A的所有内容,并与分支B合并。我只想要最后一个提交,而不是其他所有东西都与分支B合并。

任何人都知道该怎么办?

简短的回答

您可以使用cherry-pick命令将已有的提交应用到另一个分支,然后使用git push origin branchA branchB来推送两个分支。


为什么在两个分支中推送提交可能是有用的

假设你有一个这样的结构的仓库:

 A--B--C--D ← master ← HEAD \--E ← v1-release 

经过一些开发(提交ABC )项目发布后, v1-release分支被创build(所以v1可以通过bug修复来支持,下一个版本可以在master开发)。 提交E被用来指定版本信息(添加版本注释等)。 提交D引入了新function,这是计划在下一个版本,不应该出现在v1-release

现在,如果在v1-release发现一个bug,它必须在两个分支中都被修复,以便用户可以继续使用v1,并且它不会出现在下一个版本中。

修复了master的bug之后,仓库看起来应该是这样的:

 A--B--C--D--F ← master ← HEAD \--E ← v1-release 

现在提交一个bug修复必须被应用到v1-release分支。

如何真正做到这一点

提交不能被完全复制(因为提交是一个目录保存状态),但是你可以将提交中做出的改变应用到另一个提交。

cherry-pick命令就是这样做的。 它将指定提交所做的更改应用到当前分支,创build新的提交:

 git checkout v1-release git cherry-pick F 

在此之后,资源库应该是这样的:

 A--B--C--D--F ← master \--E--G ← v1-release ← HEAD 

提交G引入与F相同的更改。

您可能需要解决冲突(就像合并后)。

错误信息

之前的樱桃select现在是空的…

意味着樱桃select提交所做的更改已经存在于当前分支中。 你可能忘了检查正确的分支。

如果发生错误或冲突,可以使用git cherry-pick --abort来中止git cherry-pick --abort

最后,您可以返回到master分支并将两个分支推送到远程存储库:

 git checkout master git push origin master v1-release 

最终版本库结构:

 A--B--C--D--F ← master ← HEAD \--E--G ← v1-release 

尝试这个:

 git push origin <commitId>:<brancnName_1> git push origin <commitId>:<brancnName_2> 

它在我身边工作。