我可以将多个提交压缩在一起并保留最后一个提交的消息吗



有时我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}

使用一个干净的索引将最后两个提交压缩在一起,从而保持提示提交的消息。

最新更新