修改推送的提交消息
这个问题在这里已经有了答案:
简短的回答:没有正确的方法。
git commit --amend
所做的是用前面提交的类似但改变的提交“替换”。 你并没有真正改变原来的提交。 它仍然存在,但没有再引用它,它最终将被垃圾收集,除非开始引用它。
在本地完成时,这是透明的。 但是当你推动提交时,实质上已经太晚了。 您已经与其他人分享了可能已经提交并基于该提交的工作的提交。 您不能用另一个提交来替换该提交。
假设你做了一个提交A(在提交B之后):
B - A <- master
然后你改变主意并修改A,这实际上会创建一个新的提交A'。 当前分支将指向这个新的提交。 原始提交A仍然存在,但没有分支指向它
B - A
A' <- master
如果你第一次推A
local remote
B - A <-master B - A <- origin/master
然后修改,你将不会被允许进行正常的推动,因为推动不会是一个快速前进的合并
local remote
B - A B - A <- origin/master
A' <- master
加重问题:其他人可能已经使用了您的提交
local remote
B - A B - A - C <- origin/master
A' <- master
你可以做你的修改,然后做一个强制推git push -f
。 但是这会对其他开发人员造成问题,这些开发人员的工作基于原始提交。 这是与重新commit --amend
相同的问题(一个commit --amend
有点像一个小型commit --amend
)。 有关详细说明,请参阅Git Pro书中的“重新贴装的危险”部分。
local remote
B - A B - A - C
A' <- master A' <- origin/master
你可以做git push --force
,但是它可能会制动你的仓库。 由于某种原因,Git哲学反对改变历史。