我想更改之前提交的Git提交消息
我想更改之前推送的提交消息。 此外,我在此之后推出了其他提交。 如果我更改提交消息,则旧的消息将显示在Git提交历史记录中。
git checkout revision-to-correct
git commit --amend -m "corrected message"
如果修改为“顶”,你可以选择它们,然后将原始分支移动到新的位置......然后你可以推动--force:
git cherry-pick revision-to-correct..some-branch
git branch -f some-branch
git push origin --force some-branch
所以你有一个答案,告诉你如果提交没有被推送(忽略你明确表示它已经被推送),你会怎么做。 而且你有几个答案给你的程序,你会认为工作很好,直到你的同事开始抱怨。 但似乎没有人想要告诉你真实的分数。
提交消息是提交标识的基本部分。 这就是为什么在Edmundo的程序中,你最终不得不做一堆荒谬的樱桃采摘和强制操作。 (如果你使用-f
或--force
选项,那么git会试图提醒你一些事情。)
为了澄清:
没有编辑提交消息的机制。 你可以用一个新的提交来替换一个提交,除了有一个新的消息外,这个提交是相同的,但是如果这样做你删除了一个已经被推送的提交,那么每个其他用户的repo将不得不恢复,因为你刚刚执行了一个有效的上游rebase。 (请参阅git rebase
文档中的“从上游rebase”恢复。)
这并不意味着你永远无法做到; 这意味着在你做这件事之前,你应该得到所有使用该分支的人的同意。
在你指定的情况下 - 不仅要提交被修改,还要推出一些后续提交 - 这些提交也需要被替换。 每一个指向他们中任何一个的参考文献都必须重写。 例如,如果你有
x --- x --- A --- B --- C --- D <--(master)
E --- F <--(branch1)
并且您想要重写A
的提交消息。 所以你遵循Edmundo的建议(毕竟,这个建议比其他人更接近正确)。 你签出A
并运行commit --amend
,现在你拥有了
x --- x --- A --- B --- C --- D <--(master)
E --- F <--(branch1)
A'
请注意,你的分支仍然在他们的历史中“看到”原始提交(与原始消息),这就是为什么Edmundo说你会做一些樱桃采摘。 现在,如果你真的想这样做,樱桃采摘实际上是艰难的方式; 在这一点上,最好使用filter-branch
将B
从A
重新设置为A'
。
当然,重新养育仍然是历史重写,所以现在你得到的是
x --- x --- A --- B --- C --- D <--(origin/master)
E --- F <--(origin/branch1)
A' --- B' --- C' --- D' <--(master)
E' --- F' <--(branch1)
要解决这个问题,你必须强制推送master
和branch1
。 只要你这样做,任何其他人在D
或F
之后添加的工作(无论是在各自的分支上,还是在新的分支上)都必须重新加入到你的工作中。
如果你没有仔细地与你的同事协调,他们会发现需要通过一个有点神秘的错误信息来重定义他们的工作,如果他们对这种“错误的”方式作出反应 - 即导致他们最后一次的方式头痛 - 即强制推送,因为它清除了错误,就像你所做的那样 - 那么历史将再次拥有原始的A
和你想要消除的原始提交信息。
所以,如果这听起来还是值得的,那么正确的程序是
1)与回购的所有其他用户协调一个切换2)遵循类似于Edmundo的程序,但可能通过我上面提出的修改
您可能想看看是否有其他解决方案(如笔记或注释标签)能够满足您的需求。
要更改最近(未提交)提交的提交消息,您可以简单地使用
git commit –amend -m 'new message'
在过去更改(unpushed)提交的消息:
git rebase -i [COMMIT BEFORE THE FIRST YOU WANT TO EDIT]
用“编辑”标记所有要更改的消息。
Git将开始重新绑定,并在每个标记提交时停止。 对于每一个,做一个
git commit –amend -m 'new message'
git rebase –continue
链接地址: http://www.djcxy.com/p/49859.html
上一篇: I want to change the Git commit message for the previous commit
下一篇: How to change previous commit ID number with new Commit Id