Коммит слияния должен иметь двух родителей. Вот и весь смысл слияния.
Если у вас есть действительно веская причина для слияния только с одним родителем, вы можете использовать опцию --squash
:
# starting with branch-full-reordering at "Corrected GPU float measures"
git merge --squash branch-full-reordering-wo-auxarray-wo-diver
# go on to make the "improve performance commit"
но это очень, очень редко то, что вы хотите. Он сбрасывает всю работу, выполненную в этой другой ветви, в коммит слияния, уничтожая историю.
История, которую вы описываете, тем не менее, вовсе не является слиянием, сквошем или чем-то другим. Это ребаз.
# starting with branch-full-reordering at "Corrected GPU float measures"
git rebase branch-full-reordering branch-full-reordering-wo-auxarray-wo-diver
# go on to make the "improve performance commit"
В этом случае коммит слияния не будет - вы просто перевезли (перебазировали) вторичную ветвь на основную.
Я должен еще раз подчеркнуть: история, с которой вы закончили, скорее всего, то, что вы хотите. Он фиксирует тот факт, что некоторые разработки происходили на боковой ветви, а затем были объединены обратно.
Чтобы пересмотреть свою историю, чтобы она выглядела так, как вы хотите, вы можете сделать что-то вроде этого:
# recreate your topic branch
git branch topic <SHA1 of commit "Correct pesky bug">
# overkill: you could also specify that as branch-full-reordering^^2
# which means the second parent of the [first] parent of the branch tip
# rebase the topic branch like you meant to in the first place :)
# ~2 means two commits before
# you could also just use the SHA1 of commit "Corrected GPU float measures"
git rebase branch-full-reordering~2 topic
# rebase the main branch onto the topic
# the merge will be ignored, so this will just move the "Improve performance" commit
git rebase topic branch-full-reordering
# delete the topic branch
git branch -d topic