Why must I force push after changing a commit message?

I read this about how to amend commit messages. The accepted answer says:

If you've already pushed your commit up to your remote branch, then you'll need to force push the commit with git git push <remote> <branch> --force .

It's my understanding (also from the accepted answer) that git push --force will overwrite all data on the remote branch with the local one.

Why is force-pushing after changing a commit message necessary? What happens if I amend a commit message and try to push without -f or --force ?


By amending commits, you are changing their SHA1, which means the local and remote history are no longer the same.

If you want to replace the remote history by your (amended) local one, you will need to force push.
If you don't, Git will refuse the push, and ask you to pull (which in this case is not helpful, as you would merge with identical content but different commit messages)

Force pushing can be dangerous as it forces other collaborators to reset their own local history to the new (forced pushed) one.

As commented, --force-with-lease is safer (if the remote branch you are changing was itself changed since your last pull, meaning other were actively using it and pushing it back, then the forced push is denied).
Combine that with a sensible pull policy (where you always rebase what you have not yet pushed), and force pushing becomes less needed.


It's my understanding (also from the accepted answer) that git push --force will overwrite all data on the remote branch with the local one.

By amending commits, you have already overwritten your git history ( by changing commit's SHA1). Amend is fine as long as you haven't published your changes, but once you do, you really shouldn't be mucking around with the history, because if someone already got your changes, then when they try to pull again, it might fail. Instead of amending a commit, you should just make a new commit with the changes.

What happens if I amend a commit message and try to push without -f or --force?

Git will refuse to update the remote branch with your branch (having amend public commit) because your branch's head commit is not a direct descendent of the current head commit of the branch that you are pushing to.

If this were not the case, then two people pushing to the same repository at about the same time would not know that there was a new commit coming in at the same time and whoever pushed last would lose the work of the previous pusher without either of them realizing this.

Why is force-pushing after changing a commit message necessary?

As i have mentioned above, git will not allow to push to a remote branch. You can read this question. It has many possible workaround to this problem.

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

上一篇: 可以设置git合并自动解析吗? (git rerere)

下一篇: 为什么我必须在更改提交消息后强制推送?