Создание и переключение веток

Учимся создавать ветки, прыгать между ними современной командой switch и наводить порядок.

Список и создание веток

Посмотреть все ветки и отметить текущую звёздочкой:

git branch

Вывод:

* main
  develop

Создать новую ветку (она ответвится от текущего коммита, но вы останетесь на месте):

git branch feature-login

Переключение: switch против checkout

Исторически для переключения использовали git checkout. Но эта команда перегружена — она делает слишком много разного. Поэтому в современном git появились две специализированные команды: git switch (для веток) и git restore (для файлов). Им и стоит отдавать предпочтение.

git switch feature-login

Вывод:

Switched to branch 'feature-login'

Создать ветку и сразу переключиться на неё — самый частый сценарий — флагом -c (от create):

git switch -c feature-search

Те же действия старым синтаксисом (полезно узнавать в чужих инструкциях):

git checkout feature-login       # переключиться
git checkout -b feature-search   # создать и переключиться
ЗадачаСовременноСтарый способ
Переключитьсяgit switch Xgit checkout X
Создать и переключитьсяgit switch -c Xgit checkout -b X

Вернуться на предыдущую ветку

Прыгнуть на ветку, где вы были до этого, можно через дефис:

git switch -

Удаление веток

Когда ветка влита и больше не нужна, её удаляют:

git branch -d feature-login   # безопасно: только если ветка уже слита
git branch -D feature-login   # принудительно, даже если не слита

Используйте строчную -d — она убережёт от потери несохранённой работы, отказавшись удалять неслитую ветку. Заглавная -D удаляет без вопросов, поэтому применяйте её осознанно.

Переименование

git branch -m staroe-imya novoe-imya

Что под капотом у переключения

Когда вы выполняете git switch, происходит сразу три вещи: указатель HEAD переезжает на новую ветку, а файлы в рабочей директории заменяются на состояние, соответствующее её последнему коммиту. Поэтому после переключения вы буквально видите другой набор файлов. Это не «удаление» вашей прошлой работы — она надёжно лежит в коммитах своей ветки и вернётся, как только вы переключитесь обратно.

Незакоммиченные изменения мешают переключению

Важный нюанс: если у вас есть незакоммиченные изменения, которые конфликтуют с целевой веткой, git откажется переключаться, чтобы не потерять вашу работу. У вас два выхода: либо закоммитить изменения, либо временно отложить их командой git stash (о ней — в шестом разделе). Это защитный механизм, а не ошибка.

Обнаружение «detached HEAD»

Если переключиться не на ветку, а прямо на коммит по его хешу, git перейдёт в состояние «detached HEAD» — вы стоите на коммите без ветки. Это нормально для разовых просмотров истории, но коммиты, сделанные в таком состоянии, легко потерять. Поэтому для работы всегда создавайте ветку.

Итог

  • git switch X — переключиться, git switch -c X — создать и переключиться.
  • Старый эквивалент — git checkout / checkout -b.
  • git branch -d удаляет слитую ветку безопасно, -D — принудительно.
Проверьте себя
1. Какая команда создаёт новую ветку и сразу переключается на неё?
Agit branch new
Bgit switch -c new
Cgit switch new
Dgit checkout new
2. Чем git switch предпочтительнее git checkout для работы с ветками?
Aswitch работает быстрее в сотни раз
Bswitch специализирована под ветки и менее перегружена, чем checkout
Ccheckout вообще не умеет переключать ветки
Dswitch не требует коммитов
3. В чём разница между git branch -d и git branch -D?
AНикакой разницы нет
B-d удаляет только слитые ветки, -D удаляет принудительно
C-d создаёт ветку, -D удаляет
D-D работает только с удалёнными ветками
Поддержать проект