意外推送提交:改变git提交消息

在我的本地回购中,我有一个不正确的提交信息提交。

我已经用git push发布了不正确的提交信息。

现在远程repo(这是GitHub托pipe)也有不正确的提交消息。

我已经尝试了git commit --amend ,但是发现它在这种情况下不适合我,因为我做了额外的提交,因为不正确。

你将如何解决这种情况?

最简单的解决scheme( 但请在做这个之前阅读这个完整的答案 ):

  1. git rebase -i <hash-of-commit-preceding-the-incorrect-one>
  2. 在打开的编辑器中,将reword的提交更改为reword
  3. 保存文件并closures编辑器。
  4. 编辑器将再次打开不正确的提交消息。 修理它。
  5. 保存文件并closures编辑器。
  6. git push --force更新GitHub。

这将意味着您将发布以前发布的存储库的修改版本。 如果任何人在错误的提交信息中提取了错误信息,或者在错误的提交信息之后从错误信息中提取了错误信息,并且修复错误,那么稍后他们会遇到一些困难。 因此,在尝试这个之前,确保你能接受这个结果。

而不是去完成一个承诺的整个rebase路线:

 git reset --soft head~ git commit -m "The message you wanted to use" git push -f 

你可以在git-reset联机帮助中看到这些选项。

对于只有你正在进行的项目,改变的历史不应该是一个问题。

如果必须在多个分支上更改旧的提交消息(即提交的错误消息存在于多个分支中),则可能需要使用

 git filter-branch -f --msg-filter 'sed "s/<old message>/<new message>/g"' -- --all 

replace提交消息。

Git将创build一个用于重写的临时目录,并在refs / original /中额外备份旧引用。

-f将强制执行操作。 如果临时目录已经存在,或者已经有参考文件存储在refs / original下,这是必须的。 如果不是这样的话,你可以放弃这个标志。

--从修订选项中分离filter分支选项

--all所有的分支标签都会被重写。

由于您的旧引用的备份,您可以轻松地返回到执行命令之前的状态。

说,你想恢复你的主人,并在分行old_master访问它:

 git checkout -b old_master refs/original/refs/heads/master 

在您对更改感到满意之后,使用git push -f将更改推送到公共库。

请注意,你应该告诉你的合作者这个,因为从第一个修改过的所有提交的哈希已经被改变了。

如果您没有将代码推送到远程分支(Github / Bitbucket),您可以在命令行上更改提交消息,如下所示。

  git commit --amend -m "Your new message" 

如果你正在一个特定的分支上工作,就这样做。

 git commit --amend -m "BRANCH-NAME: new message" 

如果您已经用错误的信息推送了代码,那么在更改消息时需要小心。 即在您更改提交消息并尝试再次推送后,最终会出现问题。 要使其顺利执行这些步骤。 在做之前请阅读完整的答案

 git commit --amend -m "BRANCH-NAME : your new message" git push -f origin BRANCH-NAME # Not a best practice. Read below why? 

重要说明:当直接使用强制推送时,可能会遇到其他开发人员在同一分支上工作的代码问题。 所以为了避免这种冲突,你需要在进行强制推送之前从你的分支中提取代码

  git commit --amend -m "BRANCH-NAME : your new message" git pull origin BRANCH-NAME git push -f origin BRANCH-NAME 

如果已经推送了,这是更改提交消息时的最佳做法。