如何在git中编辑不正确的提交消息(我已推送)?
我想在历史中更深入地修改提交消息,并推出了许多新的提交。
我如何更改提交消息? 可能吗?
来自Linus Torvalds的消息可能会回答你的问题:
修改/编辑旧的提交消息
简短的回答:你不能(如果推)。
提取(Linus将BitKeeper称为BK):
注意,只是出于历史利益:在BK你可以。
如果你习惯了(就像我一样),这真的很实用。 我会使用来自安德鲁的补丁炸弹,注意到有什么地方是错误的,只是在推出之前进行编辑。
我可以用git做同样的事情。 如果只是提交消息不属于名称的一部分,并且仍然保证历史未被触及,并允许“稍后修复评论”,那本来就很容易。
但我没有。
部分原因纯粹是“内部一致性”。 Git只是一个更清洁的系统,感谢所有受SHA1保护的对象,并且所有对象都被视为相同,无论对象类型如何。 是的,有四种不同的对象,它们都非常不同,并且它们不能以相同的方式使用,但是同时,即使它们的编码在磁盘上可能不同,从概念上讲,它们全都工作正确一样。
但内部一致性并不是真正的缺乏灵活性的借口,显然如果我们能够在错误发生后纠正错误,它就会非常灵活。 所以这不是一个很强的论点。
git不允许您更改提交消息的真正原因非常简单:您可以信任这些消息。 如果你之后允许人们改变它们,那么这些信息本质上不是很值得信赖。
要完成,您可以重写您的本地提交历史记录,以反映您想要的内容,正如sykora所建议的(有一些重置和重置 - hard,gasp!)
然而,一旦你再次发布修改过的历史记录(使用git push origin +master:master
,强制推送发生的+
符号,即使它不会导致“快进”提交)......你可能会陷入一些麻烦。
从这个其他SO问题中提取:
我实际上曾经用--force推入git.git存储库,并被Linus BIG TIME斥责。 这会给其他人造成很多问题。 一个简单的答案是“不要这样做”。
目前,一个git替换可能会诀窍。
详细说明:创建一个临时工作分支
git checkout -b temp
重置为提交以替换
git reset --hard <sha1>
用正确的信息修改提交
git commit --amend -m "<right message>"
将旧提交替换为新提交
git replace <old commit sha1> <new commit sha1>
回到你所在的分支
git checkout <branch>
删除临时分支
git branch -D temp
推
guess
完成。
你可以使用git rebase -i
(针对你分支的分支)'i'进行交互。
用r
(或reword
)替换你想改变的提交注释旁边的pick
,保存并退出,这样你就可以进行编辑。
git push
一遍,你就完成了!
上一篇: How do I edit an incorrect commit message in git ( that I've pushed )?
下一篇: amend work, exactly?