我需要更改一个旧的提交信息。考虑到我之后又做了几个其他的提交,有没有一种方法可以通过git或直接在GitHub上更改它,而不会干扰其他提交?
我需要更改一个旧的提交信息。考虑到我之后又做了几个其他的提交,有没有一种方法可以通过git或直接在GitHub上更改它,而不会干扰其他提交?
如果您的最新提交不是当前使用的提交,则无法使用git commit --amend
。
您可以尝试使用rebase, 类似于:
git rebase -i HEAD~3
3代表你希望回溯的提交次数。
这是在做交互式变基。在屏幕或文本窗口中打开,用reword
替换pick
。
在下一个屏幕或文本窗口上,您将能够更改提交信息。
进行变基会更改提交哈希值,因此您需要执行git push --force-with-lease
,否则您的更改将被服务器拒绝。
--force-with-lease
与--force
比起来通常更安全,尤其是当您做有潜在破坏性的提交时。
请参见链接@Myffo发布的修改旧的或多个提交消息。
git rebase -i HEAD~4
(4是一个任意数字,您需要使用要更改的提交的等级,最新的提交被视为1)
或者
git rebase -i (SHA of the commit you want to edit)^
例如:git rebase -i 993ff4750f38b701383575a95b4efea54cc77658^(在sha末尾添加'^'符号)
这些命令将在默认的文本编辑器中显示最新的提交。在文本编辑器中查找您想要更改的提交,并将“pick”替换为“reword”。保存并退出后,会弹出另一个窗口供您更改消息。
不必重新基于和强制推送修改的分支,可以用不同的消息替换提交,而不影响现有的提交哈希。
语法如下:
git replace --edit <commit>
tree 430db025986d2bf8791be16b370ec37a00f6924b
parent 77efdb98a6e021ca81cd96f7c8c05d25c09e0ad4
author John Doe <johndoe@example.org> 1698219601 +0200
committer John Doe <johndoe@example.org> 1698219601 +0200
<initial commit message>
git push origin 'refs/replace/*'
git fetch origin 'refs/replace/*:refs/replace/*'
refs/replace
层级。 - undefined
--force
或类似选项来更新GitHub存储库,然后所有拥有旧提交的人也必须进行更新。 - torek