重定基后丢失的代码,其中合并被压缩



这是我当前的结构(一个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的最后一次提交,并将之前的所有内容压缩/融合到第二次最后一次的提交C中,如下所示:

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

然后,我用git rebase -i master:重新建立基础

  • 保留了第一个提交A,所以我使用pick。这将成为C'

  • AC之间的一切都是squash

    我没有看到合并提交ME,但列出了所有其他提交。根据这个SO,merge-commit将在其分支中包含所有内容,但消息为B。列出了B,所以这似乎很好。

  • 保留最后一次提交的D,因此再次保留pick

在重新定基时,我看到了很多冲突。在检查之后,所有的冲突都通过接受";输入变化";,因为它包含更新的代码。

然而,在重新建立基础之后,代码不再编译,现在一团糟。我意识到合并提交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

最新更新