I am trying to understand the difference between
git push --force
and
git push --force-with-lease
My guess is that the latter only pushes to the remote if the remote does not have commits that the local branch doesn't have?
force
overwrites a remote branch with your local branch.
--force-with-lease
is a safer option that will not overwrite any work on the remote branch if more commits were added to the remote branch (by another team-member or coworker or what have you). It ensures you do not overwrite someone elses work by force pushing.
I think your general idea surrounding the command is correct. If the remote branch has the same value as the remote branch on your local machine- you will overwrite remote. If it doesn't have the same value- it indicates a change that someone else made to the remote branch while you were working on your code and thus will not overwrite any code. Obviously if there are additional commits in remote then the values won't be the same.
I just think of --force-with-lease
as the option to use when I want to make sure I don't overwrite any teammates code. A lot of teams at my company use --force-with-lease
as the default option for a fail-safe. Its unnecessary in most circumstances but will save you lots of headache if you happen to overwrite something that another person contributed to remote.
I'm sure you looked at the docs but there might be some more wordy explanation contained in here: