我想更改之前推送的提交消息。此外,我已经推动了其他提交。如果我更改了提交消息,那么旧的消息将显示在Git提交历史中。
答案 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说你接下来会做一些挑选。现在,如果你真的想要这样做,那么挑选樱桃实际上是艰难的。现在,您最好使用B
从A
重新托管A'
到filter-branch
。
当然,重新育儿是仍历史重写,所以现在你得到的是
x --- x --- A --- B --- C --- D <--(origin/master)
\ \
\ E --- F <--(origin/branch1)
\
A' --- B' --- C' --- D' <--(master)
\
E' --- F' <--(branch1)
要修复 ,您必须强行推送master
和branch1
。一旦你这样做,任何其他人在D
或F
之后添加的任何工作(无论是在相应的分支上,还是在新的分支上)都必须重新定位到你的工作上。 / 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