重写最新的提交消息
您可以使用 git commit --amend
命令更改最新的提交消息。
在 Git 中,提交消息的文本是提交的一部分。更改提交消息将更改提交 ID,即命名提交的 SHA1 校验和。实际上,您正在创建一个新的提交来替换旧的提交。
提交尚未在线推送
如果提交仅存在于您的本地存储库中,并且尚未推送到 GitHub.com,则可以使用 git commit --amend
命令修改提交消息。
- 在命令行中,导航到包含要修改的提交的存储库。
- 键入
git commit --amend
并按 Enter。 - 在文本编辑器中,编辑提交消息并保存提交。
-
您可以通过在提交中添加尾部来添加共同作者。有关更多信息,请参阅 "创建具有多个作者的提交。"。
-
您可以通过在提交中添加尾部来代表您的组织创建提交。有关更多信息,请参阅 "代表组织创建提交。"。
-
下次您推送时,新的提交和消息将出现在 GitHub.com 上。
您可以通过更改core.editor
设置来更改 Git 的默认文本编辑器。有关更多信息,请参阅 Git 手册中的“基本客户端配置”。
修改旧的或多个提交消息
如果您已经将提交推送到 GitHub.com,则必须强制推送带有修改消息的提交。
我们强烈建议不要强制推送,因为这会更改存储库的历史记录。如果您强制推送,已经克隆了存储库的人员将不得不手动修复其本地历史记录。有关更多信息,请参阅 Git 手册中的“从上游变基中恢复”。
更改最近推送提交的消息
-
按照上面的步骤修改提交消息。
-
使用
push --force-with-lease
命令强制推送旧提交。git push --force-with-lease origin EXAMPLE-BRANCH
更改旧的或多个提交消息
如果您需要修改多个提交或旧提交的消息,可以使用交互式变基,然后强制推送以更改提交历史记录。
-
在命令行中,导航到包含要修改的提交的存储库。
-
使用
git rebase -i HEAD~n
命令在默认文本编辑器中显示最后n
个提交的列表。# Displays a list of the last 3 commits on the current branch $ git rebase -i HEAD~3
该列表将类似于以下内容
pick e499d89 Delete CNAME pick 0c39034 Better README pick f7fde4a Change the commit message but push the same commit. # Rebase 9fdb3bd..f7fde4a onto 9fdb3bd # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. # # Note that empty commits are commented out
-
将每个要更改的提交消息之前的
pick
替换为reword
。pick e499d89 Delete CNAME reword 0c39034 Better README reword f7fde4a Change the commit message but push the same commit.
-
保存并关闭提交列表文件。
-
在每个生成的提交文件中,键入新的提交消息,保存文件并关闭它。
-
准备好将更改推送到 GitHub 时,使用
push --force
命令强制推送旧提交。git push --force origin EXAMPLE-BRANCH
有关交互式变基的更多信息,请参阅 Git 手册中的“交互模式”。
与之前一样,修改提交消息将导致一个带有新 ID 的新提交。但是,在这种情况下,每个跟随修改提交的提交也将获得一个新的 ID,因为每个提交还包含其父级的 ID。
如果您在提交消息中包含了敏感信息,强制推送带有修改提交的提交可能无法从 GitHub 中删除原始提交。旧提交将不再是后续克隆的一部分;但是,它可能仍然缓存在 GitHub 上,并且可以通过提交 ID 访问。您必须通过GitHub 支持门户与我们联系,并提供旧提交 ID,以便将其从远程存储库中清除。
进一步阅读
- ""签署提交""