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

jon*_*nny 66 git git-amend git-commit

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

我已经发布了错误的提交消息git push.

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

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

你会如何解决这种情况?

Dan*_*ing 95

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

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

这意味着您将发布以前发布的存储库的修改版本.如果有人在您使用不正确的提交消息犯错误之间从您的仓库中提取或取出,并且当您修复它时,他们将在以后遇到一些困难.所以在尝试之前一定要接受这个后果.

  • 这个答案对它来说是有帮助的,但是有没有办法获得更多细节"如果有人从你的回购中提取或从你的回购中提出错误与搞砸的提交消息,当你修复它,然后他们将以后经历一些(轻微的)困难"?我似乎无法找到问题和解决方案的任何描述,只是警告...... (5认同)

Abi*_*ern 34

而不是为一个提交转到整个rebase路由:

git reset --soft head~
git commit -m "The message you wanted to use"
git push -f
Run Code Online (Sandbox Code Playgroud)

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

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

  • 但是,这对于一次提交来说非常方便. (10认同)
  • 执行此操作将丢失在"搞砸"提交之后执行的提交的所有提交信息(但不是内容).所有这些后续提交都将集中在一个大提交中. (5认同)
  • 同意.对于手头的问题不是一个好的解决方案,但是当你立即意识到你需要调整你的最后一次提交时非常有用.需要注意的是,当使用`-f`这样推动时,请确保您明确引用目标分支,或者您没有其他分支将破坏上游的分支. (2认同)

小智 6

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

git filter-branch -f --msg-filter 'sed "s/<old message>/<new message>/g"' -- --all
Run Code Online (Sandbox Code Playgroud)

替换提交消息.

Git将创建一个临时目录进行重写,并在refs/original /中另外备份旧引用.

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

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

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

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

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

git checkout -b old_master refs/original/refs/heads/master
Run Code Online (Sandbox Code Playgroud)

对您的更改感到满意后,使用git push -f将更改推送到您的公共存储库.

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