意外推送提交:改变git提交消息
在我的本地回购中,我有一个不正确的提交信息提交。
我已经用git push
发布了不正确的提交信息。
现在远程repo(这是GitHub托pipe)也有不正确的提交消息。
我已经尝试了git commit --amend
,但是发现它在这种情况下不适合我,因为我做了额外的提交,因为不正确。
你将如何解决这种情况?
最简单的解决scheme( 但请在做这个之前阅读这个完整的答案 ):
-
git rebase -i <hash-of-commit-preceding-the-incorrect-one>
- 在打开的编辑器中,将
reword
的提交更改为reword
。 - 保存文件并closures编辑器。
- 编辑器将再次打开不正确的提交消息。 修理它。
- 保存文件并closures编辑器。
-
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
replace提交消息。
Git将创build一个用于重写的临时目录,并在refs / original /中额外备份旧引用。
-f
将强制执行操作。 如果临时目录已经存在,或者已经有参考文件存储在refs / original下,这是必须的。 如果不是这样的话,你可以放弃这个标志。
--
从修订选项中分离filter分支选项
--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
如果已经推送了,这是更改提交消息时的最佳做法。