纠正过早合并到上游分支

时间:2013-09-13 16:25:39

标签: git

将我的功能分支合并到development分支后。我已经开始新的分支并且已经做了一些提交。

<D1><-------------------<D2>                   development
  \                     /  \
   <f11><--<f12><--<f13>    \                  add-stuff-f1
                             \
                              <f21><--<f22>    add-stuff-f2

我意识到f21f22应该在add-stuff-f1 ebacause,因为它们确实相关。我想有这样的事情:

<D1><-----------------------------------<D2>   development
  \                                     /
   <f11><--<f12><--<f13><--<f21><--<f22>       add-stuff-f1

我可以用Git做一些简单的动作吗?

2 个答案:

答案 0 :(得分:2)

首先,

git rebase --onto add-stuff-f1 development add-stuff-f2

如果合并期间发生冲突,请手动解决,然后运行

git rebase --continue

然后

git checkout add-stuff-f1

并将其重置为新的add-stuff-f2头:

git reset --hard add-stuff-f2

现在你可以删除add-stuff-f2。

git branch -d add-stuff-f2

下一步

git checkout development

并摆脱以前的合并

git reset --hard HEAD^

最后像你之前那样再次合并到开发中

git merge --no-ff add-stuff-f1

你已经完成了,祝你好运。

答案 1 :(得分:1)

将add-stuff-f2附加到add-stuff-f1而不从D1和D2之间的开发分支引入所有内容,这是一个挑战。要解决这个问题,我会从add-stuff-f2中选择提交到add-stuff-f1。

如果D1和D2之间没有变化,那么这个问题实际上很简单:

add-stuff-f1和开发应该指向同一个提交。 add-stuff-f2通过两次提交线性地领先于这两种提交。

要解决两个快进合并:

switch to the add-stuff-f1 branch. Do "git merge add-stuff-f2". 
switch to the development branch. Do "git merge add-stuff-f2"

结果将把开发和add-stuff-f1指针移动到与add-stuff-f2相同的提交。然后你可以删除f2(如果你不再需要它),并在f1上做更多的提交以继续开发第一个功能。