Git 在不提交最新更改的情况下更改最后一条提交消息
我理想的工作流程包括以下步骤Git 在不提交最新更改的情况下更改最后一条提交消息,git,Git,我理想的工作流程包括以下步骤 编辑代码 编撰 git提交-a-m“提交消息” 开始运行新的二进制文件、测试等(可能需要10分钟以上) 在二进制文件仍在运行时启动新更改 当第4步完成时,编辑第3步中的提交消息,,而不提交第5步中引入的更改,例如添加“test FOO failed” 我不能使用git commit-a--amend-m“new commit message”,因为这也会提交新的更改。我不确定我是否想为分段或分支而烦恼。我希望我可以编辑提交消息而不提交任何新的更改。有可能吗?只要:
$ git stash
$ git commit --amend -m "Your Modified Message"
$ git stash apply
没有必要在这里藏匿或做任何其他事情
git commit--amend-m'您的新邮件。
不会提交任何新的更改(注意缺少-a
标志),前提是您没有明确地将它们添加到索引中(例如,使用git add
)。您还可以使用:
git rebase -i HEAD^
这将打开文本编辑器,让您更改最后一次提交。您需要将行首的单词pick
替换为reword
,保存文件并退出。之后,将打开一个新的文本编辑器,让您更改提交消息
这听起来比建议的git commit--amend
方法要多做一些工作,但对较老的提交人也适用。因此,如果您发现要在最近十次提交中更改两条消息,可以运行git rebase-i HEAD~10
,将单词pick
再次更改为reword
,并更改这两条消息
仅供好奇:
-i
代表交互式重定基址。隐藏当前更改,修改上次提交,弹出更改。顺便说一下,我想在应用隐藏后使用git stash drop
。)您还需要退出编辑器(vim),然后重新启动它,对吗?这似乎有点费劲。难道不能在git数据结构中编辑一个字符串吗?@Oleg2718281828您也可以在编辑文件时执行此操作,无需退出vim。只需确保您已将*.sw[po]
添加到.gitignore
文件中。我尝试了您的方法。Git在日志中创建了4个条目,而不是1个:“旧消息”;“美元分行指数”;“在$branch上的WIP”;“新消息”。这是相当不令人满意的。此外,Vim会发出警告,询问我是否重新加载已更改的文件。我希望有一种方法可以在不涉及任何其他内容的情况下更改提交消息。@Oleg2718281828“我希望有一种方法可以在不涉及任何其他内容的情况下更改提交消息。”是的,我想是这样的。我试图修改头文件,但没有任何运气。。我发现每次使用--amend
,它都会创建一个格式为commit(amend):
的新日志,只是编辑不起作用。嗯,比我想象的要困难得多。这非常接近我想要的,但是有没有一种方法可以完全重写旧的提交消息,而不仅仅是在日志中添加一个新的消息(以保持提交日志更干净)?我不理解这个问题-运行我提到的命令不会创建新的提交(或者日志中有一条新消息,除非你说的是reflog,这不要紧)。我指的是gitk所显示的所有内容。无论如何,让历史更清晰是件好事。(但我会接受你的回答-谢谢!)啊,刚才看了一下gitk
output——当您有多个引用指向同一个初始提交时(例如,如果您在修改提交之前已将提交推送到远程设备),就会出现这种情况。当您更改此项时,它将显示为一个新的日志项,因为您实际上已使用新消息创建了一个新的提交,因此您的历史记录发生了分歧。请小心执行此操作;当您尝试推送时,这也会导致碰撞(需要某种形式的解决方案:合并或重新设置基础,或者强制推送以覆盖远程历史记录).我刚才还注意到我在之前的评论中犯了一个错误,“不会创建新的提交”是完全错误的。我的意思是“它不会在你的头部历史记录中附加额外的提交”。创建一个新的提交正是它所做的,但它会更新当前引用,从而使上一个提交无法访问——除非您处于我刚才描述的情况下,有多个引用指向该提交(所有这些引用都必须更新,以便旧的提交从--all视图中消失)。