特定提交后git merge / cherry-pick into master

时间:2017-11-03 17:10:51

标签: git merge

我正在努力从分支" hotfix"进入"主人"在特定的#34;位置"或者在主分支不断变化时提交

"修补程序" branch当然是一个修补程序,需要从master中跟踪以供以后使用。

你如何提供这个?

示例

A - B - C - D / master
    |
     \ 
      \_ hotfix containing commits E - F - G
&#34>主人"分支应该成为

A - B - E - F - G - C - D / master

有没有机会通过避免合并冲突来实现这一目标?

PS:目标是没有另一个分支,例如"修复/修复程序-123"

1 个答案:

答案 0 :(得分:2)

编辑:已更新,以匹配以下评论中提供的其他信息 编辑2:添加标记建议

目标:将修补程序合并到版本1.0

首先,让我们重新描述原始图片。

A---B---C---D // master
     \
      E---F---G // hotfix

假设这是历史目前的样子

      C---D // master (2.0)
     /
A---B  // current version 1.0
     \
      E---F---G // hotfix

我建议创建一个分支来跟踪版本1

git checkout -b release/v1 <B's commit SHA>

创建一个标记来标记实际发货的内容

git tag v1.0.0

然后将修补程序合并到此新分支

git merge hotfix

创建标记以标记新版本并将其发布到需要的地方

git tag v1.0.1

您的历史记录现在将如下所示

      C---D // master (2.0)
     /
A---B  // tag v1.0.0
     \
      E---F---G  // branch release/v1 and tag v1.0.1

最后,听起来您不需要2.0版中的修补程序更改,但如果您这样做:

git checkout master
git merge hotfix

原始答案

无法将修补程序分支“合并”到master中,并使历史记录看起来像您想要的那样。但是,如果您愿意重写主分支,则可能。 警告:这会给在主分支机构和should be avoided工作的其他人带来很大的痛苦。

鉴于

A---B---C---D // master
     \
      E---F---G // hotfix

您可以使用

获得所需的历史记录
git checkout master
git rebase hotfix/foo

这将导致

A---B---E---F---G---C'---D' // master
     \
      C---D // original master