Ответ 1
Так называемые слияния "Fast-forward" не производят фиксацию, тогда как другие слияния (часто называемые "octopus merge" (теперь вы видите, почему github mascott - это октокат)) производят коммиты.
В принципе, перемотка вперед происходит, когда ваши ветки не расходятся.
Предположим, вы хотите объединить ветвь foo
в ветке master
. Если эти ветки не расходятся, у вас будет такая история (каждый *
представляет собой фиксацию):
*---* (master)
\
*---*---* (foo)
В этой ситуации слияние ускоренная перемотка вперед, потому что (согласно теории графов, лежащей в основе построения графика git), master
можно достичь из foo
, Другими словами, вам просто нужно переместить ссылку master
на foo
, и все будет готово:
*---*
\
*---*---* (master, foo)
Когда ваши ветки расходятся:
*---*---* (master)
\
*---*---* (foo)
Вам нужно создать фиксацию для объединения двух ветвей:
↓
*---*---*-------* (master)
\ /
*---*---* (foo)
Фиксирование, указанное стрелкой, является фиксацией слияния и имеет две родительские коммиты (первый кончик ветки master
и текущий кончик ветки foo
).
Обратите внимание, что вы можете заставить git создать фиксацию слияния для быстрого слияния с опцией --no-ff
.
Я очень рекомендую читать http://think-like-a-git.net/ за хорошее понимание того, как теория графов относится к git (вам не нужно знать теорию графа, все, что вам нужно знать, находится на веб-сайте), что сделает работу с git невероятно легкой:)