有时我是git rebase -i master
,并且有这种情况:
pick cc1ed9d First commit
pick 9d4090c Main commit with detailed message
pick fca9df4 WIP afterthought commit with bad message
通过将最后一行的pick
更改为fixup
,我将其压缩到主提交中,并且新的合并提交使用了主提交的好消息。
但是有时顺序不同:
pick cc1ed9d First commit
pick fca9df4 WIP preliminary commit with failing test
pick 9d4090c Main commit with detailed message
在这里,我想将最后两个提交压缩在一起,但保留最后一个的消息。
我可以通过费力的复制和粘贴来做到这一点,但是有简单的方法吗?
您可以稍作更改。如果您将pick
(aka p
)更改为squash
(s
)而不是fixup
(f
),则Git将以相同的方式合并提交的更改,但不会自动保留第一次提交的消息将显示您的文本编辑器。其中将提供一个建议的提交消息,该消息将所有连续压缩的提交的消息连接在一起,您可以从中编辑到想要保留的任何内容。
为了公平起见,这不会100%自动仅保留最后一次提交的消息,但是可以避免提到的“费力的复制和粘贴”!
基本上将fixup
视为squash
,而无需进行额外的编辑消息,因此,从fixup
更改为squash
,您可以获得完整的压榨体验(lol)。
交互式rebase旨在提供很多选项,如果您已经完全知道要执行的操作,请执行以下操作:
git reset --soft @~2; git commit -C @{1}
使用一个干净的索引来压缩最后两个提交,同时保留提示提交的消息。