Разница между джуниором и мидлом в 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 — объединить с предыдущим
      Git продвинутые техники
      
# 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
Git rebase и история коммитов