Я только что воспроизвел ваш сценарий и нашел объяснение.Что происходит, так это то, что Git использует только три коммита для выполнения слияния, а не промежуточную историю.
Непосредственно перед последним слиянием, если вы выполните
MERGE_BASE=`git merge-base master release`
git diff $MERGE_BASE master
, вы не увидите сообщений об изменениях, поскольку вы внесли изменение и отменили его при следующем коммите.
Когда алгоритм трехстороннего слияния сравнивает $MERGE_BASE
, master
и release
, он видит, что master
не вводил никакихизменения и, следовательно, принимает изменения в release
без конфликта.