跳至主要内容

更改提交信息

如果提交消息包含不清楚、不正确或敏感信息,您可以将其在本地修改,并使用新消息推送新的提交到 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,以便将其从远程存储库中清除。

进一步阅读