Различия между Git merge --squash и --no-commit

Как гласит название, я не совсем понимаю различия между git merge --squash и git merge --no-commit.

Насколько я понимаю страницу справки для git merge, обе команды оставят меня в обновленном рабочем дереве, где все еще можно редактировать, а затем выполнить окончательную фиксацию (или несколько коммитов).

Может ли кто-нибудь прояснить различия этих двух вариантов? Когда я буду использовать один вместо другого?

Ответ 1

git merge --no-commit

Это похоже на нормальное слияние, но не создает слияние-фиксацию. Это коммит будет слиянием: когда вы смотрите на историю, ваша фиксация будет отображаться как нормальное слияние.

git merge --squash

Это объединит изменения в рабочем дереве без создания слияния. Когда вы совершаете объединенные изменения, это будет выглядеть как новая "нормальная" фиксация в вашей ветке: без фиксации слияния в истории. Это почти так же, как вы сделали вишневый выбор во всех сложенных изменениях.