TL;DR
The main difference lies in where the master
and dev
branches end up pointing.
![enter image description here](https://i.stack.imgur.com/jzI8N.png)
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](https://i.stack.imgur.com/OfCkZ.png)
If you merge dev
into master
If master
is checked out (git checkout master
),
![enter image description here](https://i.stack.imgur.com/3XwLe.png)
and you then merge dev
(git merge dev
), you will end up in the following situation:
![enter image description here](https://i.stack.imgur.com/yuSrH.png)
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](https://i.stack.imgur.com/ugefx.png)
and you then merge master
(git merge master
), you will end up in the following situation:
![enter image description here](https://i.stack.imgur.com/wBMwq.png)
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](https://i.stack.imgur.com/jzI8N.png)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…