Изучаем Git. Урок 16.
Как склеивать коммиты,
git rebase --interactive и git reflow
Видеоурок
Конспект урока
Краткое содержание урока, основные инструкции для командной строки, полезные ссылки и советы.
Зачем склеивать коммиты
Причины могут быть разные:
1. Несколько коммитов с мелкими правками багов
2. Правка замечаний на код-ревью
3. Соглашения в команде о мердже в мастер только одного коммита
4. Решение в процессе работы объединить логически связанные коммиты
Как склеивать коммиты, используя функционал git reset
Пример, нам нужно склеить 3 последних коммита. Можно сделать это так. Сначала сбрасываем 3 коммита без удаления его содержимого
А затем коммитим изменения с новым commit message
Что такое git rebase в интерактивном режиме
Это мощный инструмент редактирования истории коммитов. Он позволяет не только склеивать (сквошить) коммиты, но переименовывать их, редактировать содержимое коммитов и удалять коммиты.
Как запустить git rebase
Числом указываем количество коммитом, которое хотим затронуть. Дальше открывается текстовый редактор, где у коммитов нужно проставить нужные опции
Самые популярные опции редактирования коммитов
p, pick - означает использовать коммит или оставить его, то есть не трогать
r, reword - переименовать коммит
e, edit - редактировать коммит. Здесь имеется в виду редактирование содержимого коммита
s, squash - сквош или склеивание коммитов
f, fixup - это то же самое, что и сквош, только с той разницей, что гит не будет предлагать самим написать commit message, а возьмет его из того коммита, к которому приклеиваются остальные
d, drop - удалить коммит
git reflog
Что делать, если мы провели ошибочные операции git rebase -i и теперь хотим все отменить?
Все операции переписывания коммитов git заносит в отдельный журнал, который можно посмотреть с помощью git reflog
Пример журнала git reflog
Отмена операций ребейза
С помощью git reflog нужно найти хэш коммита до ошибочной операции git rebase -i. В примере выше такой может быть строка (подробности в видео)
Чтобы откатить историю коммитов к этому состоянию, нужно выполнить git reset --hard с указанием нужного хэша, то есть
Спасибо за внимание и до встречи!