变基后丢失代码,其中合并被压缩

Lost code after rebasing, in which merge is squashed

这是我当前的结构(一个 git log 但没有文本),功能分支是从 master:

分支出来的
D  <- Keep this
C  <- Squash/meld everything before into this
*
ME <- Merge commit
|\
| B
* |
* |
|/
A  <- First commit of the feature branch
MA <- master

我想保留当前功能分支 D 的最后一次提交,以及 squash/meld 它之前的所有内容进入倒数第二个提交 C,像这样:

D
C' <- Squash everything before C and C itself
MA

然后我用 git rebase -i master 做一个 rebase:

在变基时,我看到了很多冲突。检查后,所有冲突都通过接受“传入更改”来解决,因为它包含更新的代码。

然而,在rebase之后,代码不再编译,现在一团糟。我意识到合并提交 ME 中的代码丢失了。 ME 不是简单的合并,我必须在合并前解决很多冲突。

然后我尝试做一个变基,我将在其中 pick 所有提交。我认为它应该在没有任何冲突的情况下进行,并保持历史完整(或重新创建完全相同的历史)。但是git报错说有冲突,而且冲突和上面交互式rebase会话中的完全一样

我应该如何进行变基?

这是一种方法:

  • 运行 git rebase -i HEAD~2

  • 音序器脚本应该提到 CD:

    C 操作设置为 edit,保存并关闭

  • 变基将应用 C 并暂停。

    此时,运行 git reset --soft MA,然后是 git commit(这将在一次提交中压缩 MA..C

  • 现在进行变基:git rebase --continue