意外推送的提交:更改git commit消息

在我的本地仓库中,我有一次提交带有错误的提交消息。

我已经用git commit --amend发布了错误的提交消息。

现在,远程仓库(由GitHub托管)也具有错误的提交消息。

我已经尝试了git commit --amend,但是发现在这种情况下它对我不起作用,因为自错误的提交以来,我还进行了其他提交。

您将如何解决这种情况?

jonny asked 2019-10-01T14:15:26Z
4个解决方案
92 votes

最简单的解决方案(但在执行此操作之前,请先阅读整个答案):

  1. git push --force
  2. 在打开的编辑器中,将git push --force更改为reword,以进行错误的提交。
  3. 保存文件并关闭编辑器。
  4. 编辑器将再次打开,并带有错误的提交消息。 修理它。
  5. 保存文件并关闭编辑器。
  6. git push --force更新GitHub。

这意味着您将发布先前发布的存储库的修改版本。 如果在您因错误的提交消息而犯错以及修复该错误之间,有人从您的回购中拉出或获取了回购,那么他们以后会遇到一些困难。 因此,在尝试此操作之前,请确保您可以接受此结果。

Dan Moulding answered 2019-10-01T14:16:25Z
34 votes

而不是走整个rebase路线进行一次提交:

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

您可以在git-reset手册页中看到这些选项。

对于仅您正在从事的项目,更改的历史记录就不成问题。

Abizern answered 2019-10-01T14:17:07Z
6 votes

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

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

替换提交消息。

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

--all将强制执行该操作。 如果临时目录已经存在或在refs / original下已经存储了引用,则这是必需的。 如果不是这种情况,则可以删除此标志。

--all将筛选器分支选项与修订选项分开

--all将确保所有分支和标签都被重写。

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

假设您要恢复主数据库并在old_master分支中对其进行访问:

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

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

请注意,您应该将此事告知协作者,因为从第一个修改的哈希开始的所有提交哈希都已更改。

sebers answered 2019-10-01T14:18:43Z
2 votes

如果您没有将代码推送到远程分支(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

这是更改提交消息(如果已被推送)的最佳实践。

Prabhakar answered 2019-10-01T14:19:42Z
translate from https://stackoverflow.com:/questions/5032374/accidentally-pushed-commit-change-git-commit-message