Vladimir_Denisov
@Vladimir_Denisov
JS (Angular2 & Node) / Python (Django)

Как сделать общий комит при слиянии ветки devTest и ветки master?

У меня вопрос по работе с git
Например, есть 2 ветки (master и devTest)
В ветке master всего 1 комит (start), а в ветке (devTest) 5 комитов (step1, step2, ... step5)
Нужно все изменения из (step5) залить в ветку master и полученное слияние веток закомитить, например (production1)
Но проблема в том, что если перейти в ветку (master) и сделать (git merge devTest), то все комиты из ветки (devTest), будут доступны в (master)
А мне нужно, чтобы в ветке (master) было всего 2 комита: (start), который был там изначально и (product_v1)b7331ec73dc64231bb8a539b632312c9.jpg
  • Вопрос задан
  • 335 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Alexander1705
Это называется fast forward. Если в ветке, куда делаете merge нет коммитов с момента ответвления, git не будет создавать новый коммит с двумя предками, а просто перенесёт старую ветку на последний коммит новой ветки. (ветка это просто указатель на коммит).
Если хотите отключить это поведение, достаточно сделать git merge --no-ff <branch_name>
Ответ написан
Комментировать
@Xeli
Нужно воспользоваться такой фишкой как параметр --squash (сплющить коммиты) функции rebase. Смысл этой функции в том, что маленькие коммиты объединятся в один большой, потом выполнится слияние с master. После чего ветку разработки можно будет удалить. В результате должно получится 3 коммита в ветке master. Один первый начальный, второй результат "сплющивания" и третий результат мержа первого коммита мастера с коммитом "сплющенными" т.к. при rebase ветки разработки она будет опережать мастер и нужно будет выполнить слияние master c перенеснной "сплющенной" веткой .
В подробностях тут
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы