git rebase branches with complex history

flvtvl50  于 2023-10-14  发布在  Git
关注(0)|答案(3)|浏览(85)

我目前有以下情况(简化)。

master            C --+-- E
                     |   |   |
   hotfix            |   D --+
                     |       |
  develop    A - B - C ----- F - G - H - I
                                     |
  feature                            + J - K - L

最后我想说的是:

master            C --+-- E ------+
                     |   |   |       |
   hotfix            |   D --+       |
                     |       |       |
  develop    A - B - C ----- F - G - | --- H - I
                                     |
  feature                            + J - K - L

我该如何以一种体面的方式去做这件事呢?feature中的所有内容都不依赖于G,因为在feature上编辑的所有内容都在一个单独的文件夹中。
我尝试了以下方法(在feature上),但所有这些似乎都在feature中留下了F之后提交的痕迹:

1. git rebase --onto master develop feature
 2. git rebase --onto E J~1
 3. git rebase --onto master develop
flseospp

flseospp1#

Cherry从特征到主分支上选择J、K、L。你应该在将来使用一个好的分支策略。我正在使用这个one和它工作得很好。

9q78igpj

9q78igpj2#

由于我不能再等待一个彻底的解决方案,我决定使用cherrypick建议。虽然,我不想直接在master分支上进行cherrypick,但这在我的 * git flow * 工作流中是不好的做法。所以我做了以下事情:
1.启动新的修补程序

$ git flow hotfix start vx.x.x
  1. Cherry-pick来自feature的提交
$ git cherry-pick J^..L

1.完成修补程序,将精选提交合并为masterdevelop

$ git flow hotfix finish vx.x.x

1.确保我永远不会合并来自旧feature分支的提交,方法是在本地删除它们,并可能在origin上删除它们。

$ git branch -d feature
$ git push origin :feature

在此之后,我得到了以下内容:

master            C --+-- E --+---------- O
                  |   |   |   |           |
hotfix            |   D --+   J - K - L --+
                  |       |               |
develop   A - B - C ----- F - G - H - I - M

我仍然相信我应该能够用变基更优雅地解决这个问题,但我认为这是一种稍微优雅的方式。

k5hmc34c

k5hmc34c3#

git rebase -i --onto E H L
将JKL转换为E

相关问题