What is the difference between merging master into branch and merging branch into master?

git, merge

Solution

TL;DR

The main difference lies in where the `master` and `dev` branches end up pointing.

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:

If you merge `dev` into `master`

If `master` is checked out (`git checkout master`),

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

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`),

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

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

Problem

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: - merge `master` into `dev` - merge `dev` into `master` but I am not really sure how the two are different... Any explanation would be welcome.

Original source

Related problems