Работаете в ветке
dev
, периодически вливая ее в
master
. Для крупных задач (не входящих в один коммит) делаете отдельные ветви из
dev
.
Вливая
dev
в
master
, делаете это с ключом
--squash
как то так:
git checkout master
git merge --squash dev
Тут теоретически могут быть конфликты, если вы делали коммиты в
master
параллельно с
dev
, которые вам надо разрешить, а после уже добавляете и делаете один большой коммит:
git add -A
git commit -m "Merged dev: %кратко (или нет) основные изменения%"
git push
А чтобы не мозолили глаз висящие коммиты с логической незавершенностью, их можно сливать их перед
merge
с помощью интерактивного
rebase
:
git checkout dev
git rebase -i master
Откроется редактор, в котором будет список коммитов ветки
dev
. Здесь можете слепить ненавистные коммиты с помощью команды
squash
(и тогда вам предложат отредактировать сообщение) или
fixup
(тут не предложат) и потом сделать
git push --force
(для одного не критично, в толпе лучше использовать
--force-with-lease
.
Или есть еще вариант - лепить к предыдущему коммиту сразу с помощью
git commit --amend
Ну и после
merge
уже можете на
master
лейбл версии повесить.