我可以将多个提交压缩在一起并保留最后一个提交的消息吗?
Can I squash together multiple commits and keep the message from the last one?
有时我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
(a.k.a. p
) 更改为 squash
(s
) 而不是 fixup
(f
),则Git 将以相同的方式组合提交的更改,但不会自动保留第一个提交的消息,而是会调出您的文本编辑器。其中将有一个建议的提交消息,它将所有连续压缩的提交的消息连接起来,您可以从中编辑到您想要保留的任何内容。
公平地说,这不会 100% 自动仅保留最后一次提交的消息,但它确实避免了提到的 "laborious copy and paste"!
基本上可以将 fixup
视为 squash
,而无需编辑消息的额外步骤,因此通过从 fixup
更改为 squash
,您可以获得完整的压缩体验(笑)
Interactive rebase旨在提供很多选项,如果你已经确切地知道你想做什么,那就去做吧:
git reset --soft @~2; git commit -C @{1}
使用干净的索引将最后两个提交压缩在一起,以保留提示提交的消息。
有时我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
(a.k.a. p
) 更改为 squash
(s
) 而不是 fixup
(f
),则Git 将以相同的方式组合提交的更改,但不会自动保留第一个提交的消息,而是会调出您的文本编辑器。其中将有一个建议的提交消息,它将所有连续压缩的提交的消息连接起来,您可以从中编辑到您想要保留的任何内容。
公平地说,这不会 100% 自动仅保留最后一次提交的消息,但它确实避免了提到的 "laborious copy and paste"!
基本上可以将 fixup
视为 squash
,而无需编辑消息的额外步骤,因此通过从 fixup
更改为 squash
,您可以获得完整的压缩体验(笑)
Interactive rebase旨在提供很多选项,如果你已经确切地知道你想做什么,那就去做吧:
git reset --soft @~2; git commit -C @{1}
使用干净的索引将最后两个提交压缩在一起,以保留提示提交的消息。