跳至主要内容

更改提交消息

如果提交消息包含不清楚、不正确或敏感的信息,您可以将其在本地修改,并推送包含新消息的新提交到 GitHub。您还可以更改提交消息以添加缺失的信息。

重写最新的提交消息

您可以使用git commit --amend命令更改最新的提交消息。

在 Git 中,提交消息的文本是提交的一部分。更改提交消息将更改提交 ID,即命名提交的 SHA1 校验和。实际上,您正在创建一个替换旧提交的新提交。

提交未推送到线上

如果提交仅存在于本地仓库中,并且尚未推送到 GitHub.com,则可以使用git commit --amend命令修改提交消息。

  1. 在命令行中,导航到包含要修改的提交的仓库。
  2. 键入git commit --amend并按Enter键。
  3. 在文本编辑器中,编辑提交消息并保存提交。

下次推送时,新的提交和消息将显示在 GitHub.com 上。

您可以通过更改core.editor设置来更改 Git 的默认文本编辑器。有关更多信息,请参阅 Git 手册中的“基本客户端配置”。

修改较旧或多个提交消息

如果您已将提交推送到 GitHub.com,则必须强制推送包含已修改消息的提交。

我们强烈建议不要强制推送,因为这会更改仓库的历史记录。如果您强制推送,已经克隆了您的仓库的人员必须手动修复其本地历史记录。有关更多信息,请参阅 Git 手册中的“从上游变基中恢复”。

更改最近推送的提交的消息

  1. 请按照上面的步骤修改提交消息。

  2. 使用push --force-with-lease命令强制推送旧提交。

    git push --force-with-lease origin EXAMPLE-BRANCH
    

更改较旧或多个提交的消息

如果您需要修改多个提交或较旧提交的消息,可以使用交互式变基,然后强制推送以更改提交历史记录。

  1. 在命令行中,导航到包含要修改的提交的仓库。

  2. 使用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
    
  3. 将每个想要更改提交消息之前的pick替换为reword

    pick e499d89 Delete CNAME
    reword 0c39034 Better README
    reword f7fde4a Change the commit message but push the same commit.
    
  4. 保存并关闭提交列表文件。

  5. 在每个生成的提交文件中,键入新的提交消息,保存文件并关闭它。

  6. 准备好将更改推送到GitHub时,使用push --force命令强制推送覆盖旧提交。

    git push --force origin EXAMPLE-BRANCH
    

有关交互式变基的更多信息,请参阅Git手册中的“交互模式”。

如前所述,修改提交消息将导致生成具有新ID的新提交。但是,在这种情况下,每个后续提交也将获得一个新ID,因为每个提交也包含其父级的ID。

如果您的提交消息中包含敏感信息,强制推送已修改提交的提交可能无法从GitHub中删除原始提交。旧提交将不会成为后续克隆的一部分;但是,它可能仍然缓存在GitHub上,并且可以通过提交ID访问。您必须通过GitHub支持门户联系我们,提供旧提交ID才能将其从远程存储库中清除。

进一步阅读