我想更改之前提交的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-branchBA重新设置为A'

当然,重新养育仍然是历史重写,所以现在你得到的是

x --- x --- A --- B --- C --- D <--(origin/master)
                  
                   E --- F <--(origin/branch1)
         
          A' --- B' --- C' --- D' <--(master)
                  
                   E' --- F' <--(branch1)

要解决这个问题,你必须强制推送masterbranch1 。 只要你这样做,任何其他人在DF之后添加的工作(无论是在各自的分支上,还是在新的分支上)都必须重新加入到你的工作中。

如果你没有仔细地与你的同事协调,他们会发现需要通过一个有点神秘的错误信息来重定义他们的工作,如果他们对这种“错误的”方式作出反应 - 即导致他们最后一次的方式头痛 - 即强制推送,因为它清除了错误,就像你所做的那样 - 那么历史将再次拥有原始的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