There may be a confusion with the terms Merge and Commit. In git, a commit, is simply a delta, between 2 changes in context. A Merge is a symbolic commit, which represents a single entity, that combines the branches of 2 parents.
That's different that to revision systems like SVN, where a merge is actually a thing. In git, it's safer to consider it a strategy.
So if you have a point in the repo A and another point B, they will, via some path, connect to each other (unless they're on 2 separate orphaned branches). In telling git to create a point C, which may be considered as an extension to the branch A or B, but which is a symbolic merging of either A into B or B into A, git will consider all the differences along the path, back up the parentage of A and B, until it finds a shared parent.
So if O-A and O-B the path to create O-A-C (where C is your merge) considers B-O-A as the path.
That's confusing because you might consider O-B as what you want to merge, and have forgotten about O-A. But it's logical.
In your example, if 4.3.1.11 is A, origin/develop is B and 4.3.1.13 is G, you can see your branch tree is simply A-B-C-D-E-F-G. So to go from A to G, you simply advance along the tree (you can fast forward).
To put that another way, G contains A already, it just has the deltas B-G already applied, so clearly the net effect of a strategy, is git to say 'nothing to do'.
In your example 4.3.1.11 and 4.3.1.13 are tags, so by definition shouldn't move. As you commented in your answer, you can use git branch -f
to move a branch pointer to a new commit, but that's not a merge. You could also use git revert
to remove a commit (which asks git to create an inverse commit, and add that to the chain)