Продвинутые Git команды из курса (часть 3)
Изменение истории
Изменение сообщения комита (а также и изменений) с помощью команды amend
git commit --amend -C HEAD
-C - оставить прошлое сообщение
HEAD - оставить сообщение из HEAD комит
Удаление нескольких комитов, которые не нужны
git reset --hard HEAD~2
—hard полностью удаляет все изменения и приводит состояние к определенному комит
—soft оставляет изменения комит в staged области, так что их можно закомитать
git reset --mixed(можно опустить)
- до состояния рабочей директории
git reset --soft
- восстановление до staged состояния
git reset --hard
- удаляет все изменения
Что если нам нужно добавить изменения к 1 комиту, хотя уже есть несколько после?
Можно использовать —autosquash
Сначала сделаем git commit --amend -m"fixup! сообщение комита"
git rebase -i --root --autoscquash
autoscquash найдет комит с fixup!
и комит с сообщеием идущим после восклицательного знака и объединит эти 2 комита
reflog
Git создает рефлог для каждой бранчи и для описания head.
Посмотреть reflog:
git reflog master
git reflog
Посмотреть на что указывал head 2 позиции назад
git show HEAD@{2}
Восстановить изменения в ветке можно так
git reset --hard master@{1}
Создадим элиас для этого
git config --global alias.undo '!f() {git reset --hard $(git rev-parse --abbrev-ref HEAD)@${1-1}}; f'
создается bash функция, которая сразу и вызывается
rev-parse --abbrev-ref используется чтобы взять имя текущей ветки
${1-1} - параметр - на сколько изменений откатиться (если он не передан использовать дефолтный 1)
git undo 2
- откатиться на 2 комита
Git bisect
bisect позволяет вам найти плохой комит, который например поломал сборку
git bisect start
- начинаем
Помечаем последний комит как bad и помечаем тот комит вкотором все было ок как good
git bisect bad HEAD
git bisect good HEAD~4
Git переходит на комит между ними и вы проверяете его
Если все ок, вы помечаете комит как good и git переходи опять на средний комит между good и bad
Таким образом при помощи бинарного поиска можно быстрее найти плохой комит
После этого выходим из bisect
git bisect reset
Можно кстати настроить git, чтобы он сам запускал команду по проверке билда например (если это возможно). Только она должна возвращать exit код 0, если все ок, или код ошибки при ошибке.
Короткая запись
git bisect start HEAD HEAD~4
git bisect run make
- где make build script
Кстати, завел личный блог Sleepless Tech в Telegram про разработку и DIY, заходите!
И присоединяйтесь к каналам FrontEndDev и Web Stack в Telegram, чтобы не пропустить самое интересное из мира Web!