codecamp

GitHub 更改提交消息

如果提交消息中包含不明确、不正确或敏感的信息,您可以在本地修改它,然后将含有新消息的新提交推送到 GitHub。 您还可以更改提交消息以添加遗漏的信息。

重写最近的提交消息

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

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

提交尚未推送上线

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

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

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

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

修改旧提交或多个提交的消息

如果您已将提交推送到 GitHub,则必须强制推送含有修正消息的提交。

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

修改最近推送提交的消息

  1. 按照上述步骤修改提交消息。

  1. 使用 push --force 命令强制推送经修改的旧提交。

$ git push --force example-branch

修改旧提交或多个提交的消息

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

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

  1. 使用 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 
   #
   # 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

  1. 在要更改的每个提交消息的前面,用 reword 替换 pick

   pick e499d89 Delete CNAME
   reword 0c39034 Better README
   reword f7fde4a Change the commit message but push the same commit.

  1. 保存并关闭提交列表文件。

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

  1. 强制推送修改后的提交。

   $ git push --force

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

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

如果您的提交消息中包含敏感信息,则强制推送修改后的提交可能不会导致从 GitHub 中删除原提交。 旧提交不会成为后续克隆的一部分;但是,它可能仍然缓存在 GitHub 上,并且可通过提交 ID 访问。 您必须联系 GitHub 支持GitHub 高级支持 并提供旧提交 ID,以便从远程仓库中清除它。

延伸阅读

GitHub 代表组织创建提交
GitHub 提交分支和标记标签
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

GitHub 身份验证

在 GitHub 上管理订阅和通知

在 GitHub 上管理活动的订阅

GitHub 组织和团队

GitHub 管理对组织仓库的 Git 访问

GitHub 计费和付款

GitHub 使用议题和拉取请求进行协作

GitHub 在具有代码质量功能的仓库上进行协作

管理在 GitHub 上的工作

GitHub 建立强大的社区

GitHub 管理仓库

GitHub 自定义 GitHub 工作流程

在 GitHub Marketplace 中购买并安装应用程序

通过 GitHub Jobs 寻找人才

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }