我知道如何将提交压缩在一起并丢弃消息:
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} }?
答案 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
您可以使用您可以编辑的三个第一次提交消息打开编辑器。
您可以使用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 2c0aa2c、commit bae5b4a、commit 1d410cd、commit 9e3cebd、commit 71ee81c、commit ae70e34(2021 年 1 月 29 日)Charvi Mendiratta (charvi-077
) .
请参阅commit 7cdb968(2021 年1 月29 日)和commit 498bb5b,commit 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"