推后更改git commit消息(因为没有人从远程拉出)

我做了一个git commit和随后的推送。 我想更改提交消息。 如果我理解正确,这是不可取的,因为有人可能在我做出这样的更改之前从远程存储库中取出。 如果我知道没有人拉扯什么?

有没有办法做到这一点?


改变历史

如果它是最近的提交,你可以简单地这样做:

git commit --amend

这将带有编辑器的最后一个提交消息,并让你编辑消息。 (如果您想清除旧信息并使用新信息,可以使用-m 。)

推动

然后当你推动时,这样做:

git push --force-with-lease <repository> <branch>

或者你可以使用“+”:

git push <repository> +<branch>

或者你可以使用--force

git push --force <repository> <branch>

使用这些命令时要小心。

  • 如果其他人将更改推送到同一分支,则可能希望避免销毁这些更改。 --force-with-lease选项是最安全的,因为如果有任何上游更改,它会中止

  • 如果你没有明确指定分支,Git将使用默认的推送设置。 如果您的默认推送设置为“匹配”,那么您可以同时销毁多个分支上的更改。

  • 之后拉/取

    任何已经拉动的人现在都会收到一条错误消息,他们需要更新(假设他们自己没有做任何修改),可以这样做:

    git fetch origin
    git reset --hard origin/master # Loses local commits
    

    使用reset --hard时要小心 - reset --hard 。 如果您对分支有更改,这些更改将被破坏。

    关于修改历史记录的说明

    被破坏的数据实际上只是旧的提交信息,但--force不知道,并且会高兴地删除其他数据。 因此认为--force为“我要销毁数据,我知道肯定被破坏的数据。” 但是当被销毁的数据被提交时,通常可以从reflog中恢复旧的提交 - 数据实际上是孤立的而不是被销毁的(尽管孤立的提交被定期删除)。

    如果你不认为你在破坏数据,那么远离 - --force ......可能会发生不好的事情。

    这就是为什么--force-with-lease更安全一些。


    说啊 :

    git commit --amend -m "New commit message"
    

    接着

    git push --force origin <BRANCH-NAME>
    

    可能会迟到派对,这里是我在这里没有看到的答案。

    第1步git rebase -i HEAD~n HEAD〜n为受影响的最后n提交进行交互式重新分配。

    git会弹出一个编辑器来处理这些提交,注意这个命令: # r, reword = use commit, but edit the commit message ,这正是我们需要的。

    步骤2 :将pick改为r以表示您想要更新信息的提交。 保存并关闭编辑器。

    第3步 :在以下提交文件中,根据需要更新提交消息

    第4步 :在所有提交消息更新后。 你可能想要做git push -f来更新远程。

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

    上一篇: Changing git commit message after push (given that no one pulled from remote)

    下一篇: How to revert a merge commit that's already pushed to remote branch?