13

今天我遇到了一个问题。我的队友从master创建了分支。他在这个分支中开发了一个特性,然后在子特性的分支中开发了两个子特性。最后,他对整个事情做了两次重构提交。所以...

     C--D    E--F             | subfeatures
    /    \  /    \
   B------M1------M2--G--H    | feature
  /
 A-------------------K        | master

通常我们在 no-fast-forward 合并到 master 之前 rebase 特性分支。但是当然这个变基失败了。重新定位的功能分支看起来像:

     B'--C'--D'--E'--F'--G'--H'
    /
A--K

当然 C & D 的指针错了,所以我也得到了两个子特征分支“从空中”生长。如果子功能分支未合并到功能中,我了解如何修复它,但此时我很困惑。我在 rebase recovery 分支中挑选了所有内容并再次合并。这里有更简单的方法吗?

4

2 回答 2

15

请注意,您需要 git1.7.6+git rebase --preserve-merges才能正常工作。

长话短说:你刚刚完成了一个合并,并且在你能够推送你的提交之前有人推送了一个提交。解决方案是让 git 知道您所做的合并。

git rebase --preserve-merges <upstream>

或者

git rebase -p <upstream>

但是有一个问题,如果你的合并有你解决的冲突,它们将不会被 rebase 机器拾取。
你最终会再次解决冲突......至少 git 版本 1.7.5.4 是这种情况

(这需要git rerere

于 2012-11-20T12:42:34.220 回答
2

您是否手动逐一挑选每个提交?

只需git rebase -i master feature按照您的意愿运行和重写历史。

于 2012-04-04T18:38:26.673 回答