Разница между джуниором и мидлом в Git — знание инструментов для работы с историей коммитов. Разберём техники, которые делают вашу работу чище и эффективнее.
git stash: временное сохранение изменений
# stash.sh
# Сохранить незакоммиченные изменения git stash push -m "WIP: добавить форму логина" # Переключиться на другую задачу git switch hotfix/critical-bug # ... исправить, закоммитить, вернуться # Применить сохранённые изменения git stash list # посмотреть список git stash pop # применить последний и удалить git stash apply stash@{2} # применить конкретный
Interactive Rebase: чистая история
Интерактивный rebase позволяет переписать историю коммитов: объединить, переименовать, переупорядочить или удалить коммиты до их публикации.
# rebase.sh
# Редактировать последние 3 коммита git rebase -i HEAD~3 # В открывшемся редакторе: # pick abc1234 feat: добавить модель # squash def5678 fix: опечатка # reword ghi9012 добавить контроллер # pick — оставить как есть # squash — объединить с предыдущим![]()
# reword — изменить сообщение # drop — удалить коммит
// Золотое правило rebase
Никогда не делайте rebase коммитов, которые уже опубликованы в общей ветке (main, develop). Rebase переписывает историю — если кто-то уже работает на основе этих коммитов, у него будут проблемы. Rebase только для локальных или собственных веток.
cherry-pick: взять конкретный коммит
# cherry-pick.sh
# Применить конкретный коммит к текущей ветке git cherry-pick abc1234 # Несколько коммитов git cherry-pick abc1234 def5678 # Диапазон (A не включается, B включается) git cherry-pick abc1234..def5678
git bisect: найти коммит с багом
# bisect.sh
git bisect start git bisect bad # текущий коммит — сломан git bisect good v1.0.0 # этот работал # Git переключает на середину, вы тестируете git bisect good # этот работает git bisect bad # этот сломан # Повторять до нахождения виновного коммита git bisect reset