使用Git在两个分支中推送提交

时间:2010-10-26 13:24:21

标签: git branch push

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

我不能使用“git push”,因为它会推送到三个分支,我只想在其中两个分支中提交..

我已尝试在分支B中使用“git merge HEAD - 从分支A--委托id - ”然后它从分支A获取所有内容并与分支B合并。我只想要最后一次提交而不是其他所有内容与之合并B部门。

任何人都知道该怎么做?

2 个答案:

答案 0 :(得分:97)

简短回答

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


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

假设您有一个具有此结构的存储库:

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

经过一些开发(提交ABC)项目已发布并创建了v1-release分支(因此v1可以通过错误修正和下一版本支持可以在master)中开发。提交E用于指定版本信息(添加的发行说明等)。提交D引入了新功能,该功能计划用于下一版本,不应出现在v1-release中。

现在,如果在v1-release中发现错误,则必须在两个分支中修复它,以便用户可以继续使用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相同的更改。

您可能必须解决冲突(与合并后完全相同)。

错误消息

  

之前的樱桃选择现在是空的......

表示由当前分支中已经存在由挑选提交所做的更改。你可能忘了检查正确的分支。

如果出现错误或冲突,可以使用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

答案 1 :(得分:0)

试试这个:

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

它适用于我。