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

时间:2011-02-17 17:29:53

标签: git git-commit amend

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

我已经使用git push发布了错误的提交消息。

现在远程仓库(GitHub托管的)也有不正确的提交消息。

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

你会如何解决这种情况?

4 个答案:

答案 0 :(得分:93)

最简单的解决方案(但请在完成此操作之前阅读完整的答案):

  1. git rebase -i <hash-of-commit-preceding-the-incorrect-one>
  2. 在打开的编辑器中,在行上将pick更改为reword以进行错误提交。
  3. 保存文件并关闭编辑器。
  4. 编辑器将再次打开并显示错误的提交消息。解决它。
  5. 保存文件并关闭编辑器。
  6. git push --force更新GitHub。
  7. 这意味着您将发布以前发布的存储库的修改版本。如果有人在您使用不正确的提交消息犯错误之间从您的仓库中提取或取出,并且当您修复它时,他们将在以后遇到一些困难。所以在尝试之前一定要接受这个结果。

答案 1 :(得分:34)

而不是将整个rebase路由用于一次提交:

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

您可以在git-reset联机帮助页中查看选项。

对于只有您正在处理的项目,更改的历史记录应该不是问题。

答案 2 :(得分:6)

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

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

替换提交消息。

Git将创建一个临时目录,用于重写并在refs / original /.

中另外备份旧引用

-f将强制执行操作。如果临时目录已存在或者已存在 refs / original 下的引用,则必须执行此操作。如果不是这样,你可以放弃这个标志。

--将过滤器分支选项与修订选项分开

--all将确保重写所有分支标记

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

说,您想要恢复您的主人并在分支old_master中访问它:

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

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

请注意,您应该通知您的协作者,因为已经更改了从第一个修改过的提交的所有哈希值。

答案 3 :(得分:2)

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

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