用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
经过一些开发(提交A
, B
, C
)项目发布后, 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>
它在我身边工作。