意外推送的提交:更改git commit消息
在我的本地仓库中,我有一次提交带有错误的提交消息。
我已经用git commit --amend
发布了错误的提交消息。
现在,远程仓库(由GitHub托管)也具有错误的提交消息。
我已经尝试了git commit --amend
,但是发现在这种情况下它对我不起作用,因为自错误的提交以来,我还进行了其他提交。
您将如何解决这种情况?
最简单的解决方案(但在执行此操作之前,请先阅读整个答案):
git push --force
- 在打开的编辑器中,将
git push --force
更改为reword
,以进行错误的提交。 - 保存文件并关闭编辑器。
- 编辑器将再次打开,并带有错误的提交消息。 修理它。
- 保存文件并关闭编辑器。
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 /中。
--all
将强制执行该操作。 如果临时目录已经存在或在refs / original下已经存储了引用,则这是必需的。 如果不是这种情况,则可以删除此标志。
--all
将筛选器分支选项与修订选项分开
--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
这是更改提交消息(如果已被推送)的最佳实践。