Skip to content

Сверка историй merge и rebase

Сверим истории merge и rebase.

Merge
1.    Перейдем в ветку feature-3.

2.    Проверим историю ветки feature-3.

Если бы мы смержились с веткой main, история снова была бы неупорядоченной.
3.    Давай смержим ветку main в ветку feature-3.

4.    Посмотрим историю.

Коммит main add some changes сместился наверх. Если смержить нашу ветку в ветку main, то история в main станет аналогичной, а наша цель — не менять последовательность истории и не смешивать коммиты разных веток в разнобой.
Коммиты всех веток должны идти последовательно друг за другом.

Откатываем merge
1.    Отменим изменения на момент merge branch ‘feature 2’.

2.    В появившемся окне выбираем Hard, затем нажимаем reset.
3.    В следующем окне воспользуемся хоткеем ctrl/cmd + t (git pull), на всякий случай выберем rebase и поставим галочку у пункта Don't show again.
Мы восстановили историю в ветке feature-3 из удаленного репозитория.

Rebase
1.    Теперь сделаем ребейз с ветки main.

2.    Смотрим историю.

Видим, что история сохранила свою последовательность.
3.    На всякий случай запушим изменения.

Появится сообщение об ошибке.

Эта ошибка возникает, потому что история изменений (коммитов) локального гита не совпадает с историей удаленного репозитория.
Для преодоления этой ошибки воспользуемся отправкой изменения в принудительном режиме — командой в терминале. Эта операция перепишет историю изменений (коммитов) в ветке feature-3 в удаленном репозитории.
4.    Для этого введем команду в терминале.

Выполняй force push при возникновении ошибки после rebase.

Важно отметить, что в рабочем проекте ни в коем случае не стоит делать force push в главные ветки (main, master) проекта, поскольку так можно потерять кодовую базу в репозитории. Безопасно выполнять force push можно только в дочерние ветки main, созданные тобой!