Ответ 1
Проблема здесь в том, что вы используете комки для сквоша.
Когда вы выполните merge --squash
, вы оставите всю историю ветки. Вы на самом деле не "объединили ветку" - вы только что применили сжатое представление о своей истории. Поэтому, если вы выполните более поздний merge --squash
, git будет повторно использовать все фиксации в истории ветвей (так как у двух ветвей нет общего предка).
Когда вы выполняете первый merge --squash
, вы создаете фиксацию на main
, которая содержит "Создать один, два и три". Таким образом, история main
сначала "создает четыре", затем "создает один, два и три".
Когда вы выполняете второй merge --squash
, вы добавляете коммит, который состоит из (в действительности) "Создать один, два и три" плюс "Удалить два". Сеть этих двух коммитов вместе (раздавлена!) - это "Создать один и три". Таким образом, git автоматически объединяет команду "Создать один и три" с текущим состоянием репо, оставляя вас с четырьмя существующими файлами. Слияние содержимого выполняется автоматически, потому что файлы "один" и "три" идентичны с обеих сторон.
Вы должны использовать "настоящие" слияния или вишневую подборку вместо раздавливания, если вы хотите сохранить репо на пульте дистанционного управления. A merge --squash
- это не то же самое, что "играть через все новые коммиты в удаленном репозитории и интегрировать их здесь".