我想更改前一次提交的Git提交消息

时间:2017-05-31 19:33:58

标签: git

我想更改之前推送的提交消息。此外,我已经推动了其他提交。如果我更改了提交消息,那么旧的消息将显示在Git提交历史中。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

所以你有一个答案可以告诉你,如果提交没有被推送,你将如何这样做(忽略你特意说它已被推送)。并且你有几个答案给你的程序,你认为这些程序很有效,直到你的同事开始抱怨。但似乎没有人愿意告诉你真正的分数。

提交消息是提交标识的基本部分。这就是为什么,在Edmundo的程序中,你最终不得不做一堆无意义的挑选和强制操作。 (如果您使用-f--force选项,那么git会尝试警告您某些事情。)

所以澄清一下:

用于编辑提交消息的机制。除了拥有新消息之外,您可以使用相同的新提交替换提交,但如果这样做,则删除已推送的提交,repo的每个其他用户都必须恢复,因为您刚刚执行了有效上游变种。 (参见"从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'

请注意,您的分支机构仍然是&#34;请参阅&#34;最初的提交(带有原始信息)在他们的历史中,这就是为什么Edmundo说你接下来会做一些挑选。现在,如果你真的想要这样做,那么挑选樱桃实际上是艰难的。现在,您最好使用BA重新托管A'filter-branch

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

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

要修复 ,您必须强行推送masterbranch1。一旦你这样做,任何其他人在DF之后添加的任何工作(无论是在相应的分支上,还是在新的分支上)都必须重新定位到你的工作上。 / p>

如果你没有与同事仔细协调,他们会发现需要通过一些有点神秘的错误信息来改变他们的工作,如果他们对此做出反应,那就是&#34;错误&#34 ;方式 - 即导致他们最后头疼的方式 - 即强制推送,因为它清除错误,就像你一样 - 然后历史记录将再次使原始A具有您想要的原始提交消息废除。

所以,如果这听起来仍然有点麻烦,那么正确的程序就是

1)与回购的所有其他用户协调切换 2)遵循类似于Edmundo的程序,但可能有我上面建议的修改

您可能希望查看不同的解决方案(如注释或带注释的标签)是否能满足您的需求。

答案 2 :(得分:-1)

要更改最近(未删除)提交的提交消息,只需使用

即可
git commit –amend -m 'new message'

过去更改(未删除)提交的消息:

git rebase -i [COMMIT BEFORE THE FIRST YOU WANT TO EDIT]

使用“编辑”标记要更改的所有邮件。

Git将启动变基并在每次标记的提交时停止。对于每一个,做一个

git commit –amend -m 'new message'

git rebase –continue