Git – the difference between merging master into branch and merging branch into master

gitmerge

I have a branch called master and another called dev. Usually, I do tests and improvements on dev; when done, I merge it into master, tag it, and release new version of the application.

Now, I face a decision to make in regard to merging:

  1. merge master into dev
  2. merge dev into master

but I am not really sure how the two are different… Any explanation would be welcome.

Best Answer

TL;DR

The main difference lies in where the master and dev branches end up pointing. enter image description here

Full explanation

Merging one branch into another is not a symmetric operation:

  • merging dev into master, and
  • merging master into dev,

are, in general, not equivalent. Here is an illustrative example that explains the difference between the two. Let's assume your repo looks as follows:

enter image description here

If you merge dev into master

If master is checked out (git checkout master),

enter image description here

and you then merge dev (git merge dev), you will end up in the following situation:

enter image description here

The master branch now points to the new merge commit (F), whereas dev still points to the same commit (E) as it did before the merge.

If you merge master into dev

If, on the other hand, dev is checked out (git checkout dev),

enter image description here

and you then merge master (git merge master), you will end up in the following situation:

enter image description here

The dev branch now points to the new merge commit (F', whereas master still points to the same commit as it did before the merge (D).

Putting it all together

enter image description here