git switch: переход между ветками
Обновлено 31 июля 2026 г.
git switch <ветка> переводит тебя на другую ветку и переписывает файлы в рабочем каталоге под её последний коммит.
Переключение меняет содержимое папки. Файл, созданный на другой ветке, после перехода исчезнет из папки: он никуда не делся, он лежит в коммите той ветки, а git показывает то состояние, на которое смотришь сейчас.
$ git switch feature-x
Switched to branch 'feature-x'
$ git switch main
Switched to branch 'main'
$ git switch - # вернуться на ту ветку, где был до этогоФлаг -c (create) создаёт ветку и сразу переходит на неё. Это самая частая форма команды:
$ git switch -c feature-x
Switched to a new branch 'feature-x'
$ git switch -c old-view main # создать от main, а не от текущего коммитаВетка создаётся от того коммита, на котором ты стоишь, если не указать другую точку старта.
Отношение к git checkout
В старых статьях, ответах на форумах и книгах ты увидишь git checkout feature-x и git checkout -b feature-x. Это то же самое. git switch появился в git 2.23 в 2019 году, чтобы развести две разные задачи, которые раньше решал один checkout: ходить по веткам и восстанавливать файлы из коммита. Вторую задачу забрал git restore. Старый checkout работает по-прежнему и никуда не денется, но новичку проще держать в голове две команды с понятными именами.
Что мешает переключиться
Git не пустит на другую ветку, если незакоммиченные правки при этом затрутся:
$ git switch draft
error: Your local changes to the following files would be overwritten by checkout:
report.txt
Please commit your changes or stash them before you switch branches.
AbortingЭто защита, а не поломка. Выхода два: закоммитить правки (пусть даже черновым сообщением) или временно убрать их в сторону через git stash. После этого переключение проходит.
Если правки не пересекаются с тем, что различается между ветками, git молча перенесёт их за тобой на новую ветку. Это удобно ровно до того момента, когда ты забываешь, где их оставил.
Частые ошибки
Git не создаёт ветку молча, если такого имени нет. Он отвечает fatal: invalid reference: nope. Проверь список через git branch: скорее всего, в имени опечатка.
git switch -c на уже занятое имя тоже не пройдёт: fatal: a branch named 'draft' already exists. Если ветка уже есть, переходи без -c.
Где это в учебнике
Глава 5. Ветки: параллельные версии проекта разбирает переключение на примере: срочная правка в основной версии, пока своя переделка лежит незаконченной.
Потренироваться руками - в Песочнице: настоящий терминал с git и проверка шагов.