Немного предыстории.
В моей компании есть большое хранилище git. Мы делаем разработку на ветке (надеюсь, недолгую) и затем выполняем слияние (без squa sh) с мастером. К сожалению, сейчас у нас есть проект, который жил в своем филиале месяцами. Этому способствовали многочисленные разработчики, и он насчитывает более ста коммитов. Несколько дюжин этих коммитов являются слияниями с мастером, и они чередуются с нашими собственными коммитами.
Теперь мы хотим объединить весь этот код с мастером - но в форме всех маленьких коммитов. Мы хотим сква sh им. Однако мы столкнулись с противодействием DevOps. Слияния выполняются автоматически с помощью инструмента, и DevOps настаивают на том, что операция git «squa sh and merge» может привести к проблемам. Короче говоря, они не будут делать никаких сквошей или ребаз для нас. Мы прекрасно справляемся с потерей всей нашей истории коммитов. Но любая возможность испортить хозяина (или ввести ошибочные слияния) должна быть исключена.
Как мы можем автоматически взамен sh зафиксировать коммиты по запросу извлечения ПЕРЕД созданием слияния?
Я знаю, что мы можем сделать "git rebase", но это будет ручной процесс прохождения всех 100+ коммитов. Подверженных ошибкам. Не достаточно для нас.
При запуске "git diff" я вижу все изменения между нашей веткой и мастером, красивые и чистые. Есть ли способ:
- Преобразовать все эти изменения в ОДИН коммит;
- Сделать это автоматически (нет необходимости в вводе человеком во время процесса);
- С переписыванием истории веток (должно закончиться мастер-перебазированием + 1 большой коммит вместо 100 с малых коммитов);
- Все сделано на ветке до (не во время) слияния.