当前位置:  开发笔记 > 编程语言 > 正文

如何在git中编辑不正确的提交消息(我已推送)?

如何解决《如何在git中编辑不正确的提交消息(我已推送)?》经验,为你挑选了5个好方法。

我想在历史记录中更深层次地修改提交消息,并且我已经推送了许多新的提交.

如何更改提交消息?可能吗?



1> VonC..:

来自Linus Torvalds的消息可能会回答您的问题:

修改/编辑旧的提交消息

简短的回答:你不能(如果被推).


提取(Linus将BitKeeper称为BK):

旁注,只是出于历史兴趣:在BK你可以.

如果你已经习惯了(就像我一样)那真的很实用.我会用安德鲁的补丁炸弹,注意出错了,然后在推出之前编辑它.

我可以用git做同样的事情.简单地说,提交消息不是名称的一部分,并且仍然保证历史不受影响,并且允许"稍后修改注释"的事情.

但我没有.

其中一部分纯粹是"内部一致性". 由于受到SHA1保护的所有内容,Git只是一个简洁的系统,所有对象都被处理相同,无论对象类型如何.是的,有四种不同的对象,它们都是真的不同,它们不能以相同的方式使用,但同时,即使它们的编码在磁盘可能不同,从概念上讲它们都可以正常工作相同.

但内部一致性并不是缺乏灵活性的借口,显然如果我们能够在发生错误后修复错误,那将非常灵活.所以这不是一个非常有力的论点.

git不允许您更改提交消息的真正原因最终非常简单:这样,您可以信任消息.如果您允许人们事后更改它们,则这些消息本质上不是非常值得信赖的.


为了完整,您可以重写您的本地提交历史记录,以反映您想要的内容,如sykora所建议的(使用一些rebase和reset - hard,gasp!)

但是,一旦您再次发布修订后的历史记录(使用a git push origin +master:master,+强制推送发生的符号,即使它不会导致"快进"提交)...您可能会遇到麻烦.

摘自其他SO问题:

我实际上曾经用--force推送到git.git存储库并被Linus BIG TIME骂了一顿.它会给其他人带来很多问题.一个简单的答案是"不要这样做".


为了使事情更具体,如果你修改/ rebase提交,它们的提交标识符(git索引中的十六进制哈希)不可避免地会改变; 这意味着编辑的提交与git VCS历史中的旧提交不同.这就是说,如果您的开发团队成员遗憾地已经撤回旧的提交,他们有义务提取已编辑的新提交,并在他们的本地工作副本中执行新旧合并.

2> 小智..:

目前git替换可能会成功.

详细信息:创建临时工作分支

git checkout -b temp

重置为要替换的提交

git reset --hard 

使用正确的消息修改提交

git commit --amend -m ""

用新的提交替换旧提交

git replace  

回到原来的分店

git checkout 

删除临时分支

git branch -D temp

guess

完成.


@Jonah:当我尝试推送到远程分支时,我收到了"Everything up-date"消息

3> 小智..:

你可以使用git rebase -i(对你分支的分支)'i'进行交互.

pick使用r(或reword)替换要更改的提交注释的旁边,保存并退出,这样您就可以进行编辑.

git push 再一次,你完成了!


我喜欢这个程序,但起初并不完全理解答案.如果有人需要帮助,Githulb帮助页面会提供有关它的详细信息:https://help.github.com/articles/changing-a-commit-message/

4> Huy Vo..:

假设你有一个这样的树:

dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]

首先,checkout临时分支:

git checkout -b temp

temp分支上,reset --hard对要更改其消息的提交(例如,提交是946992):

git reset --hard 946992

使用amend更改消息:

git commit --amend -m ""

之后,树将如下所示:

dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]
           \
            b886a0 [temp]

然后,cherry-pick所有的承诺是提前946992mastertemp并提交它们,使用amend,如果你想改变自己的消息,以及:

git cherry-pick 9143a9
git commit --amend -m "
...
git cherry-pick 5a6057
git commit --amend -m "

树现在看起来像这样:

dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]
               \
                b886a0 - 41ab2c - 6c2a3s - 7c88c9 [temp]

现在强制将temp分支推送到远程:

git push --force origin temp:master

最后一步,删除master本地的git fetch origin分支,master从服务器拉分支,然后切换到分支master和删除分支temp.

现在,本地和远程都将更新所有消息.



5> Christian Go..:

在我们的商店,我介绍了将可识别命名的带注释标签添加到具有错误消息的提交,并使用注释作为替换的约定.

虽然这对那些运行随意"git log"命令的人没有帮助,但它确实为我们提供了一种在注释中修复错误的bug跟踪器引用的方法,并且我的所有构建和发布工具都理解了约定.

这显然不是一般性的答案,但它可能是人们可以在特定社区内采用的东西.我敢肯定,如果这是用于更大规模,可能会出现某种瓷器支撑,最终......


"git notes"可能有类似的用途
推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有