变基后丢失代码,其中合并被压缩
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:
第一个提交A
被保留,所以我使用pick
。这将变成 C'
.
A
和 C
之间的所有内容都是 squash
。
我没有看到合并提交 ME
,但列出了所有其他提交。根据此 SO,合并提交将在其分支中包含所有内容,但带有 B
的消息。 B
已列出,所以这看起来不错。
保留最后一次提交 D
,因此再次 pick
。
在变基时,我看到了很多冲突。检查后,所有冲突都通过接受“传入更改”来解决,因为它包含更新的代码。
然而,在rebase之后,代码不再编译,现在一团糟。我意识到合并提交 ME
中的代码丢失了。 ME
不是简单的合并,我必须在合并前解决很多冲突。
然后我尝试做一个变基,我将在其中 pick
所有提交。我认为它应该在没有任何冲突的情况下进行,并保持历史完整(或重新创建完全相同的历史)。但是git报错说有冲突,而且冲突和上面交互式rebase会话中的完全一样
我应该如何进行变基?
这是一种方法:
运行 git rebase -i HEAD~2
音序器脚本应该提到 C
和 D
:
将 C
操作设置为 edit
,保存并关闭
变基将应用 C
并暂停。
此时,运行 git reset --soft MA
,然后是 git commit
(这将在一次提交中压缩 MA..C
)
现在进行变基:git rebase --continue
这是我当前的结构(一个 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:
第一个提交
A
被保留,所以我使用pick
。这将变成C'
.A
和C
之间的所有内容都是squash
。我没有看到合并提交
ME
,但列出了所有其他提交。根据此 SO,合并提交将在其分支中包含所有内容,但带有B
的消息。B
已列出,所以这看起来不错。保留最后一次提交
D
,因此再次pick
。
在变基时,我看到了很多冲突。检查后,所有冲突都通过接受“传入更改”来解决,因为它包含更新的代码。
然而,在rebase之后,代码不再编译,现在一团糟。我意识到合并提交 ME
中的代码丢失了。 ME
不是简单的合并,我必须在合并前解决很多冲突。
然后我尝试做一个变基,我将在其中 pick
所有提交。我认为它应该在没有任何冲突的情况下进行,并保持历史完整(或重新创建完全相同的历史)。但是git报错说有冲突,而且冲突和上面交互式rebase会话中的完全一样
我应该如何进行变基?
这是一种方法:
运行
git rebase -i HEAD~2
音序器脚本应该提到
C
和D
:将
C
操作设置为edit
,保存并关闭变基将应用
C
并暂停。此时,运行
git reset --soft MA
,然后是git commit
(这将在一次提交中压缩MA..C
)现在进行变基:
git rebase --continue