git rebase:fixup提交但使用最新消息

时间:2018-03-14 19:06:08

标签: git rebase

我知道如何将提交压缩在一起并丢弃消息:

pick A do thing
pick B debug
fixup C more debugging
pick D do another thing

这将导致3次提交,将2次调试提交压缩成一个,并显示消息" debug"。但是,我想知道是否有一种简单的方法来fixup提交,但是使用LATEST消息,而不是最早的消息。例如:

p A do thing
p B debug 1
f C debug 2
f D fix bug. #also remove debug statements

通过运行上面的命令,我最终会得到一个修复错误的提交,并且不会有调试语句的残余。问题是该提交将有" debug 1"的注释。我希望得到#34;修复bug"的消息。我知道我可以reword提交,但是会打开编辑器,并强制我重新键入提交消息。我尝试在rebase文件中重写和复制邮件,但是当reword编辑器打开时,它仍然有旧信息。

是否可以fixup提交但使用最新消息,或者修改rebase编辑器中的提交消息,而不必为每个单独的提交打开编辑器{{1} }?

4 个答案:

答案 0 :(得分:1)

在rebase开头更改你的待办事项列表,以反转提交修复的顺序:

pick A do thing
pick C more debugging
fixup B debug
pick D do another thing

答案 1 :(得分:1)

我认为你真的没有选择。但是,而不是使用fixup&改写,你可以使用壁球

p A do thing
p B debug 1
s C debug 2
s D fix bug. #also remove debug statements

您可以使用您可以编辑的三个第一次提交消息打开编辑器。

没有rebase

您可以使用reset来完成此操作。

# To clean the workspace before by saving the state
git stash
git reset --soft HEAD~3
# To restore the saved state before the reset operation
git commit -am 'fix bug'
git stash pop

使用此解决方案,编辑器无法打开

答案 2 :(得分:0)

就其价值而言,我发现的最佳方法是在运行“ git rebase --interactive --autosquash”后简单地编辑rebase文件,并将“ fixup”替换为“ squash”(或简称为“ s”)

这将连接两个提交消息,并允许您编辑最终消息。

答案 3 :(得分:0)

检查最新的 Git 2.32(2021 年第 2 季度)是否有帮助,因为“rebase -i”正在通过新选项得到增强。

参见 commit 2c0aa2ccommit bae5b4acommit 1d410cdcommit 9e3cebdcommit 71ee81ccommit ae70e34(2021 年 1 月 29 日)Charvi Mendiratta (charvi-077) .
请参阅commit 7cdb968(2021 年1 月29 日)和commit 498bb5bcommit eab0df0(2021 年1 月19 日),作者Phillip Wood (phillipwood)
(由 Junio C Hamano -- gitster --commit ce4296c 合并,2021 年 3 月 26 日)

<块引用>

rebase -i:添加fixup [-C | -c]命令

原补丁:Phillip Wood
导师:Christian Couder
导师:菲利普·伍德
签字人:Charvi Mendiratta

<块引用>

fixup 命令添加选项以修复提交内容和消息。

  • fixup -C 命令用于替换原始提交消息和
  • fixup -c,另外允许编辑提交消息。

结合:

<块引用>

rebase -i:教--autosquash使用amend!

原补丁:Phillip Wood
导师:Christian Couder
导师:菲利普·伍德
签字人:Charvi Mendiratta

<块引用>

如果提交主题以“amend!”开头,则将其重新排列为“fixup!”提交并将pick命令替换为fixup -C命令,即用于修复内容(如果有)并用 amend! 提交消息替换原始提交消息。

git rebase -i documentation 现在显示为:

<块引用>

如果要将两个或多个提交合并为一个,请替换命令 使用“pick”或“squash”表示第二次及后续提交的“fixup”。

如果提交有不同的作者,折叠提交将是 归功于第一次提交的作者。

折叠提交的建议提交消息是第一个的串联 提交的消息与由“squash”命令标识的那些,省略 由“fixup”命令标识的提交消息,除非“fixup -c” 使用。
在这种情况下,建议的提交消息只是“fixup -c”提交的消息,并且会打开一个编辑器,允许您编辑该消息。
fixup -c”提交的内容(补丁)仍然是 合并到折叠提交中。
如果有多个“fixup -c”提交,则使用最后一个提交的消息。

您还可以使用“fixup -C”获得与“fixup -c”相同的行为,但无需打开编辑器。

git rebase -i 包括(来自 commit f07871d):

<块引用>

f, fixup [-C | -c] <commit>

像“squash”一样,但只保留前一次提交的日志信息,除非使用了-C,在这种情况下,只保留这次提交的信息;
-c-C 相同,但会打开编辑器\n"