由于懒惰的原因,我用默认消息推送了一堆提交,现在它变得很麻烦,因为我真的不知道每个提交中都更改了什么。
如何仅编辑以前提交的消息并(如果可能)保留提交树?
答案1
要编辑一系列提交的提交消息,我运行
git rebase -i firstsha
其中firstsha
是我要编辑的第一个提交的父提交的标识符。 (您可以在此处使用任何有效的引用,因此git rebase -i HEAD~4
将显示最后四次提交。)
在打开的编辑器中,将要修改的提交上的所有“pick”条目更改为“reword”,然后关闭编辑器;然后,系统会要求您输入您选择的所有提交的提交消息。
请注意,这将要更改提交树,因为提交的哈希值将会更改。您将必须强制推送新树,或将其推送到新分支。变基合并时要小心;您需要使用-r
( --rebase-merges
),并阅读git rebase
联机帮助页的“Rebasing merges”部分。
要快速仅编辑最后一次提交,请运行
git commit --amend
(但要注意任何已经准备好的提交)。
答案2
您正在寻找的是git rebase
。
如果您只想更改之前的git commit
消息,则只需使用以下内容:
git commit --amend
对之前的提交进行所需的更改,然后保存编辑。
但是,如果您需要更改较旧的提交,则需要使用rebase
.
git rebase -i HEAD~N
其中 N 等于您希望返回的提交数量,例如 2 或 12 或 6 等。
在这里你应该得到一个包含你的提交的文本编辑器。将选项从 更改为pick
来reword
更改消息。
确定要更改的所有提交并适当更改其选项后,保存并关闭编辑器。然后对每个提交消息进行更改。一旦您满意,您就可以运行:
git push --force
尽管哈希值不同,但您应该维护您的 git 历史记录,因为您已经进行了所需的必要更改。以下是您应该查看的一些其他链接:
7.6 Git 工具 - 重写历史
GitHub 帮助 - 更改提交消息
StackOverflow - 关于更改旧提交消息的问题