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

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

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

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

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

你将如何解决这种情况?


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

  • git rebase -i <hash-of-commit-preceding-the-incorrect-one>
  • 在打开的编辑器,改变pickreword就行了不正确的提交。
  • 保存该文件并关闭编辑器。
  • 编辑器将再次打开错误的提交消息。 修理它。
  • 保存该文件并关闭编辑器。
  • 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
    

    替换提交消息。

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

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

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

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

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

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

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

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

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

    链接地址: http://www.djcxy.com/p/48925.html

    上一篇: Accidentally pushed commit: change git commit message

    下一篇: hard and a remote repository