重写最新的提交消息
您可以使用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才能将其从远程存储库中清除。
进一步阅读
- "签署提交"