git 如何处理修复提交后的挤压提交?

How does git handle a squash commit after a fixup commit?

我正在与一个提交数量相当大的分支合作,并希望进行交互式 rebase 以在合并到 master 之前将其压缩为更少的提交。为了避免奇怪的冲突,我试图在可能的情况下对提交保持一定的顺序,但有时需要在一长串 fixup 中维护提交消息。换句话说,我有类似的东西:

pick abc123 commit A
f jkl567 commit B
f def345 commit C
s mno789 commit D
f xyz901 commit E

来自压缩提交的消息是否仍会保留在第一个选择的提交中,或者它会做一些类似压缩 'commit D' 到 commit C 的事情,然后在 [=15] 时最终删除提交消息=] 得到 "fixed up" 进入 commit B 然后进入 commit A?

根据我的经验,您将在压缩提交完成后获得提交消息的编辑器。默认情况下,编辑器会压缩来自所有提交的所有提交消息。然后您可以根据需要编辑消息。

TL;DR 然而 git 计算建议的提交消息,您将有机会在最终提交之前编辑它。

Git 正在按顺序依次进行,因此它将:

  1. 修复 B,保留来自 A 的提交消息
  2. 用 C 修复新提交,保留来自 A
  3. 的提交消息
  4. 用 D 压扁,要求编辑来自 A+D 的消息
  5. 用 E 修复,所以保留你在 3 中保存的版本。)