git squash для merge Слияние веток с объединением коммитов/ Сквош
Primary tabs
Еще есть squash для rebase
Squash при merge
При merge коммиты объединяются во вливаемой ветке, что не очень удобно если merge с мастером закрыт (а в больших командах всегда так и не в больших тоже) и вам наоборот надо подтягивать мастер в свою ветку, поэтому в качестве решения там создают временную ветку клон-мастера .
Выглядеть это может, например так:
- Обновляем обе ветки (если нужно, мастер часто нужно):
git fetch origin master git fetch origin имяВашейВетки
-
Создаем клон мастера
git checkout -B master-new origin/master
- Вливаем в созданный клон со сквошем нашу ветку с задачей
git merge --squash origin/имяВашейВетки
- Проверяем что все окей, и выполняем форсированный пуш (внимание! это затирает изменения во внешней ветке, возможна потеря изменений, если в текущей ветке что-то не так, но тут иначе никак) в ветку MR/PR внешнего репозитория (там где в конечном итоге ее вольют в мастер):
git push --force -u origin master-new:имяВашейВетки
Коммитим изменения - в них попадут все объединенные изменния из вашей ветки (все чем она отличается от мастер/клона мастера):
git commit -m 'Сообщение коммита'
-- минус в данный схеме в создании дополнительной ветки, плюс - не надо выбирать никакие конкретные коммиты, объединяются вообще все. И тут еще может возникнуть вопрос как вернуться на свою ветку, чтобы продолжить разработку (если это требуется).
Как вернуть и продолжить работать с имяВашейВетки
В последнем действии в инструкции выше:
git push --force -u origin master-new:имяВашейВетки
-- мы находимся на ветке master-new (фактически мы перезаписали ее с во внешем репозитории остоянием master-new), но что если нам нужно вернуться к своей ветке и продолжить работу?
Сейчас во внешнем репозитории у нас в ветке имяВашейВетки только 1 коммит, в то время как в локальном в той же ветке имяВашейВетки их может быть много, чтобы синхронизировать состояние веток, действуем так (как и в общей инструкции отката состояния к внешнему):
git checkout имяВашейВетки git fetch origin имяВашейВетки git reset --hard origin/имяВашейВетки
- готово, можно продолжать работать, ветки синхронизированы
- Log in to post comments
- 1365 reads