Чтобы при объединении веток получить только один коммит из вливаемой ветки, а не всю историю, нужно использовать параметр --squash
:
git merge --squash branch -m "super commit"
Ссылки:
UPD: Как показала практика, с master’ом так лучше не делать, т.к. в этом случае другие ветки сообщают примерно следующее:
# Your branch and 'origin/master' have diverged, # and have 336 and 1 different commit(s) each, respectively.
Т. е. пути вашей ветки и мастера разошлись. Учитывая, что в большинстве случаев разрабатываемые ветки в итоге вливаются обратно в master, это может привести к неприятным последствиям. К каким точно — не знаю, но для себя решил не использовать опцию --squash
.
>>> Как показала практика, с master’ом так лучше не делать
Имеется ввиду вливание мастера в другую ветку с флагом —squash ?
Нет, я вливал devel в master. Изначально хотелось, чтобы каждый коммит в master был релизом. Но оказалось, что лучше просто мёржить, а релизные коммиты помечать тегом.
Странные у вас желания. Попробуйте тэги.
git checkout master
git merge --no-ff devel
И будет Вам счастье! Это сделает вид ветки master похожим на то, чего Вы хотите: ветка будет содержать только релизные комиты.