Как переключиться на другую ветку
$ git switch dev
Switched to branch 'dev'То же самое старой командой — git checkout dev. Она работает во всех версиях Git, git switch — в 2.23 и новее. Список веток — git branch, текущая отмечена звёздочкой.
Полезные варианты
| Задача | Команда |
|---|---|
| Создать ветку и перейти в неё | git switch -c new-feature (или git checkout -b new-feature) |
| Вернуться на предыдущую ветку | git switch - |
| Посмотреть все ветки, включая серверные | git branch -a |
| Какая ветка сейчас | git status (первая строка) или git branch --show-current |
Ветка есть только на сервере
Коллега отправил ветку dev, у вас её ещё нет. Сначала скачайте сведения о ветках, потом переключитесь:
$ git fetch
$ git switch dev
Switched to a new branch 'dev'
branch 'dev' set up to track 'origin/dev'.Git сам создал локальную ветку dev, связанную с origin/dev. Если такое имя есть у нескольких удалённых репозиториев, укажите явно: git switch -c dev --track origin/dev.
Мешают незакоммиченные изменения
error: Your local changes to the following files would be overwritten by checkout:
README.md
Please commit your changes or stash them before you switch branches.
AbortingВ рабочей папке есть правки, а в другой ветке этот файл отличается. Git не переключается, чтобы не потерять ваши правки. Три выхода:
- сохранить коммитом в текущей ветке:
git addиgit commit; - отложить через
git stash, переключиться, а вернувшись —git stash pop(подробно — в справке git stash); - выбросить правки, если они не нужны:
git restore README.md, а затем переключиться.
git switch -f и git checkout -f переключают принудительно и молча выбрасывают все незакоммиченные правки в файлах, которые мешали. Вернуть их будет нельзя.
Если правки не мешают (файл в обеих ветках одинаков), Git переключится и перенесёт их с собой — они не привязаны к ветке, пока не сделан коммит.
Частые ошибки
fatal: invalid reference: devуgit switchилиerror: pathspec 'dev' did not match any file(s) known to gitуgit checkout— ветки с таким именем нет ни у вас, ни среди скачанных с сервера. Проверьте написание (регистр букв важен) и сделайтеgit fetch.- После
git checkout 3e677f8(хеш вместо имени ветки) Git пишетYou are in 'detached HEAD' state— вы перешли на отдельный коммит, а не на ветку. Что это и как вернуться — в справке Что такое detached HEAD.