有时我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
(也称为p
(更改为squash
(s
(而不是fixup
(f
(,那么Git将以相同的方式组合提交的更改,但不会自动保留第一次提交的消息,而是会显示您的文本编辑器。其中将有一个提议的提交消息,它将所有连续压缩的提交的消息连接起来,您可以从中向下编辑到您想要保留的任何内容。
公平地说,这并不是100%自动只保留上次提交的消息,但它确实避免了前面提到的"费力的复制和粘贴"!
基本上,把fixup
想象成squash
,而不需要额外的编辑消息的步骤,所以通过从fixup
变成squash
,你可以获得完全的挤压体验(哈哈(。
Interactive rebase旨在提供许多选项,如果你已经确切地知道你想做什么,就去做吧:
git reset --soft @~2; git commit -C @{1}
使用一个干净的索引将最后两个提交压缩在一起,从而保持提示提交的消息。