如何在两个分支中推送提交?
我不能使用"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)