Search code examples
gitmerge-conflict-resolutiongit-amend

git merge conflict after git amend - "Your branch and 'origin/master' have diverged"


This is what happens:

  1. After a recent commit to remote master, I make a small trivial change to my local repo
  2. I add git commit --amend and leave the same commit message as HEAD
  3. I try to push the repo to master with git push

And now I get

On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
  (use "git pull" to merge the remote branch into yours)
nothing to commit, working directory clean

I want to understand:

  1. Why this exactly happens?
  2. What can I do to prevent this?
  3. How do I reconcile master with local after a git amend?

Solution

  • You changed an existing pushed commit, creating your own version (since its content has changed)

     --x---Y (master: that is the X amended)
        \
         --X (origin/master)
    

    That is why you have 1 and 1 different commit each between master and origin/master

    What can I do to prevent this?

    Don't "amend" an existing pushed commit (only local not-yet-pushed one)

    How do I reconcile master with local after a git amend?

    Simply rebase on top of origin/master, then push

    git rebase origin/master
    
     --x--X---Y' (master)
          |
    (origin/master)
    
    git push
    
     --x--X---Y' (master, origin/master)
    

    However, jwinn notes in the comments that it can mean your amend goes away ("warning: skipped previously applied commit"), and would not be the way to get your local amend (on an already pushed commit) to origin/master.