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

Mad*_*doc 58 git branch push

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

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

我在分支B中尝试了"git merge HEAD - 从分支A--委托id - "然后它从分支A获取所有内容并与分支B合并.我只想要最后一次提交而不是其他所有与分支B合并的内容.

谁知道该怎么办?

max*_*max 103

简短的回答

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


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

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

A--B--C--D  ? master ? HEAD
      \--E  ? v1-release
Run Code Online (Sandbox Code Playgroud)

在一些开发(提交A,)之后B,C项目被发布并且v1-release创建了分支(因此可以使用错误修正来支持v1,并且可以开发下一个版本master).Commit E用于指定版本信息(添加的发行说明等).Commit D引入了新功能,该功能计划用于下一个版本,不应出现在v1-release.

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

修复bug后master,存储库应如下所示:

A--B--C--D--F  ? master ? HEAD
      \--E     ? v1-release
Run Code Online (Sandbox Code Playgroud)

现在提交F一个bugfix必须应用于v1-release分支.

如何实际做到这一点

无法准确复制提交(因为提交是目录保存状态),但您可以将提交中所做的更改应用于另一个提交.

cherry-pick命令正是如此.它将指定提交所做的更改应用于当前分支,从而创建新提交:

git checkout v1-release
git cherry-pick F
Run Code Online (Sandbox Code Playgroud)

在此之后,存储库应如下所示:

A--B--C--D--F  ? master
      \--E--G  ? v1-release ? HEAD
Run Code Online (Sandbox Code Playgroud)

Commit G引入了相同的更改F.

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

错误信息

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

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

如果出现错误或冲突,可以使用中止切换git cherry-pick --abort.

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

git checkout master
git push origin master v1-release
Run Code Online (Sandbox Code Playgroud)

最终存储库结构:

A--B--C--D--F  ? master ? HEAD
      \--E--G  ? v1-release
Run Code Online (Sandbox Code Playgroud)

  • cherry-pick命令的示例将有助于说明在上下文中的使用并且避免需要消化文档页面.我们中的一些人不能像其他人一样轻松实现RTFM .. :) (4认同)