git checkout master
git merge --squash <feature>
приведет к 1 сдавленному коммиту с мастером,
Correct.
но сдавлены ли коммиты в ветви функций?
Нет, или да, или, может быть, "мю": вопрос не имеет смысла. В настоящий момент ветвь объектов фактически dead: ее больше не следует использовать. То, что у вас есть сейчас, можно нарисовать так:
ABCD <-- master (HEAD)
/
...--*
\
A--B--C--D <-- feature
, где ABCD
- это один коммит, который делает то же самое, что и последовательность из четырех коммитов A--B--C--D
. (Обратите внимание, что до git merge --squash
имя master
указывало на коммит *
.)
Теперь вы можете указать ветку объекта на новый коммит, используя, например, git branch -f feature master
, давая:
ABCD <-- master (HEAD), feature
/
...--*
\
A--B--C--D [abandoned]
Обратите внимание, что если вы вместо этого используете:
git checkout <feature>
git rebase -i master
и затем измените три из четырех pick
команд на squash
, вы стерли старую ветвь функций и создали новую ветвь feature
и переместили имя feature
, чтобы указать на него, во многом так же. Отличительной особенностью является то, что имя master
все еще указывает на его исходную фиксацию, а вы на новой feature
:
ABCD <-- feature (HEAD)
/
...--* <-- master
\
A--B--C--D [abandoned]
Теперь вы можете git checkout master
и git merge --ff-only feature
получить тот же результат, что и при предыдущем методе git merge --squash
.
В обоих случаях, если кто-либо еще использует старую ветвь feature
, они должны приспособиться к резкому изменению на feature
, которое переместилось так, что первоначальные четыре коммита больше не нужны и следует прекратить использовать.