gitmergefast-forward

Git Merge --no-ff makes copy of commits


I had a curious git behaviour today, and I want to ask if this is normal. Now, this is the situation (new commits are added to the bottom):

br1  br2
  A
    \ 
     B
     C
     D

Now, when I make

git checkout br1
git merge --no-ff br2

It becomes like this (please read up to down; newest commit is 'E')

br1  br2
  A
  | \ 
  |  B
  |  C
  |  D
  | /
  E

OK.. Now, weird thing is; now I call "git status"; it says I'm 4 commits ahead of the remote branch. How is this happening? Shouldn't I be only one commit ahead?

And the peculiar thing is, when I check from the Stash (the Git Web UI, basically) it confirms this "4 commits" status and I see the same commits (B C and D) under "br1" and "br2" both...

I assumed when I used "--no-ff" parameters, the commits at "br2" (B C D) won't be copied to the "br1" and only merge commit created. Am I mistaken here?


Solution

  • Technically, the 4 commits are actually part of br1. If you delete br2, the commits will still be part of br1. The difference comes when you are resetting the merge commit. If you do a hard reset you will go back to the commit just before the merge commit i.e. E. This is especially useful when you want to rollback. So yes, you are four commits ahead, but as long as you are not resetting br1, you should be fine.

    Also -no-ff is not to stop git from copying the commits. It is to keep the commits separate from the tree of br1. That way you maintain a history of branches and the context in which the commits were made, rather than a mass of commits all related to different features