修改推送的提交消息

这个问题在这里已经有了答案:

  • 我如何将修改的提交推送到远程Git存储库? 13个答案

  • 简短的回答:没有正确的方法。

    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哲学反对改变历史。

    链接地址: http://www.djcxy.com/p/48913.html

    上一篇: Amending a pushed commit message

    下一篇: Rewinding remote git branch