Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
- 2.55.0 2026年06月29日
- 2.51.1 → 2.54.0 no changes
- 2.51.0 no changes
- 2.50.1 no changes
- 2.50.0 2025年06月16日
- 2.44.1 → 2.49.1 no changes
- 2.44.0 2024年02月23日
- 2.43.2 → 2.43.7 no changes
- 2.43.1 2024年02月09日
- 2.43.0 2023年11月20日
- 2.38.1 → 2.42.4 no changes
- 2.38.0 2022年10月02日
- 2.35.1 → 2.37.7 no changes
- 2.35.0 2022年01月24日
- 2.30.1 → 2.34.8 no changes
- 2.30.0 2020年12月27日
- 2.27.1 → 2.29.3 no changes
- 2.27.0 2020年06月01日
- 2.23.1 → 2.26.3 no changes
- 2.23.0 2019年08月16日
НАЗВАНИЕ
git-switch — переключение веток
ОБЗОР
gitswitch[<параметры>] [--no-guess] <ветка>gitswitch[<параметры>]--detach[<начальная-точка>]gitswitch[<параметры>] (-c|-C) <новая-ветка> [<начальная-точка>]gitswitch[<параметры>]--orphan<новая-ветка>
ОПИСАНИЕ
Переключиться на указанную ветку. Рабочий каталог и индекс обновляются в соответствии с веткой. Все новые коммиты будут добавлены к верхушке этой ветки.
При необходимости можно создать новую ветку с помощью -c, -C, автоматически из внешней ветки с тем же именем (см. --guess) или отсоединить рабочий каталог от любой ветки с помощью --detach вместе с переключением.
Переключение веток не требует чистого индекса и рабочего каталога (т.е. отсутствия различий по сравнению с HEAD). Однако операция прерывается, если она приводит к потере локальных изменений, если не указано иное с помощью --discard-changes или --merge.
ПАРАМЕТРЫ
- <ветка>
-
Ветка, на которую нужно переключиться.
- <новая-ветка>
-
Имя для новой ветки.
- <начальная-точка>
-
Начальная точка для новой ветки. Указание <начальной-точки> позволяет вам создать ветку на основе какой-либо другой точки в истории, отличной от той, на которую в данный момент указывает
HEAD. (Или, в случае--detach, позволяет вам осмотреть и отсоединиться от какой-либо другой точки.)Вы можете использовать синтаксис
@{-<N>}, чтобы ссылаться на <N>-ю последнюю ветку/коммит, на который было выполнено переключение с помощью операцииgitswitchилиgitcheckout. Вы также можете указать-, что является синонимом@{-1}. Это часто используется для быстрого переключения между двумя ветками или для отмены ошибочного переключения ветки.В качестве особого случая вы можете использовать <rev-a>
...<rev-b> как сокращение для базы слияния <rev-a> и <rev-b>, если существует ровно одна база слияния. Вы можете опустить не более одного из <rev-a> и <rev-b>, и в этом случае по умолчанию используетсяHEAD. -
-c<новая-ветка> -
--create<новая-ветка> -
Создать новую ветку с именем <новая-ветка>, начинающуюся с <начальной-точки>, перед переключением на ветку. Это транзакционный эквивалент
$ git branch <новая-ветка> $ git switch <новая-ветка>
то есть ветка не сбрасывается/не создаётся, если
gitswitchне завершится успешно (например, когда ветка используется в другом рабочем каталоге, не только текущая ветка остаётся прежней, но и ветка не сбрасывается на начальную точку). -
-C<новая-ветка> -
--force-create<новая-ветка> -
Аналогично
--create, за исключением того, что если <новая-ветка> уже существует, она будет сброшена на <начальную-точку>. Это удобный ярлык для:$ git branch -f _<новая-ветка>_ $ git switch _<новая-ветка>_
-
-d -
--detach -
Переключиться на коммит для осмотра и одноразовых экспериментов. Подробности см. в разделе "ОТСОЕДИНЁННЫЙ HEAD" в git-checkout[1].
-
--guess -
--no-guess -
Если <ветка> не найдена, но существует отслеживаемая внешняя ветка ровно в одном внешнем репозитории (назовём его <внешний-репозиторий>) с совпадающим именем, обрабатывать как эквивалент
$ git switch -c <ветка> --track <внешний-репозиторий>/<ветка>
Если ветка существует в нескольких внешних репозиториях и один из них назван переменной конфигурации
checkout.defaultRemote, мы будем использовать этот для устранения неоднозначности, даже если <ветка> не уникальна для всех внешних репозиториев. Установите её, например,checkout.defaultRemote=origin, чтобы всегда переключаться на внешние ветки оттуда, если <ветка> неоднозначна, но существует во внешнем репозитории origin. См. такжеcheckout.defaultRemoteв git-config[1].--guess— это поведение по умолчанию. Используйте--no-guess, чтобы отключить его.Поведение по умолчанию можно задать с помощью переменной конфигурации
checkout.guess. -
-f -
--force -
Псевдоним для
--discard-changes. -
--discard-changes -
Продолжить, даже если индекс или рабочий каталог отличаются от
HEAD. И индекс, и рабочий каталог восстанавливаются в соответствии с целевым объектом переключения. Если указан--recurse-submodules, содержимое подмодулей также восстанавливается в соответствии с целевым объектом переключения. Это используется для отмены локальных изменений. -
-m -
--merge -
Если у вас есть локальные изменения в одном или нескольких файлах, которые различаются между текущей веткой и веткой, на которую вы переключаетесь, команда отказывается переключать ветки, чтобы сохранить ваши изменения в контексте. Однако с этим параметром выполняется трёхходовое слияние между текущей веткой, содержимым вашего рабочего каталога и новой веткой, и вы окажетесь на новой ветке.
Когда возникает конфликт слияния, записи индекса для конфликтующих путей остаются не слитыми, и вам нужно разрешить конфликты и пометить разрешённые пути с помощью
gitadd(илиgitrm, если слияние должно привести к удалению пути). -
--conflict=<стиль> -
То же, что и параметр
--mergeвыше, но изменяет способ представления конфликтующих блоков, переопределяя переменную конфигурацииmerge.conflictStyle. Возможные значения:merge(по умолчанию),diff3иzdiff3. -
-q -
--quiet -
Тихий режим, подавлять информационные сообщения.
-
--progress -
--no-progress -
Ход выполнения по умолчанию выводится в стандартный поток ошибок, если он подключён к терминалу, если не указан
--quiet. Этот флаг включает вывод хода выполнения, даже если он не подключён к терминалу, независимо от--quiet. -
-t -
--track[ (direct|inherit)] -
При создании новой ветки настраивает конфигурацию "вышестоящей". Подразумевается
-c. Подробности см. в описании--trackв git-branch[1].Если параметр
-cне указан, имя новой ветки будет получено из отслеживаемой внешней ветки путём просмотра локальной части спецификатора ссылки, настроенного для соответствующего внешнего репозитория, а затем удаления начальной части до "*". Это указывает нам использоватьhackв качестве локальной ветки при создании ветки отorigin/hack(илиremotes/origin/hack, или дажеrefs/remotes/origin/hack). Если указанное имя не содержит слэша или приведённое выше угадывание даёт пустое имя, угадывание прерывается. В таком случае вы можете явно указать имя с помощью-c. -
--no-track -
Не настраивать конфигурацию "вышестоящей", даже если переменная конфигурации
branch.autoSetupMergeимеет значение true. -
--orphan<новая-ветка> -
Создать новую нерождённую ветку с именем <новая-ветка>. Все отслеживаемые файлы удаляются.
-
--ignore-other-worktrees -
gitswitchотказывается, когда нужная ссылка уже переключена другим рабочим каталогом. Этот параметр заставляет его всё равно переключить ссылку. Другими словами, ссылка может находиться в нескольких рабочих каталогах. -
--recurse-submodules -
--no-recurse-submodules -
Использование
--recurse-submodulesобновит содержимое всех активных подмодулей в соответствии с коммитом, записанным в суперпроекте. Если ничего (или--no-recurse-submodules) не используется, рабочие каталоги подмодулей не будут обновлены. Как и git-submodule[1], это отсоединитHEADподмодулей.
ПРИМЕРЫ
Следующая команда переключается на ветку "master":
$ git switch master
После работы в неправильной ветке переключение на правильную ветку выполняется с помощью:
$ git switch моя-тема
Однако ваша "неправильная" ветка и правильная ветка "моя-тема" могут различаться в файлах, которые вы изменили локально, и в этом случае приведённое выше переключение завершится ошибкой, например:
$ git switch моя-тема ошибка: У вас есть локальные изменения в 'frotz'; переключение веток не выполняется.
Вы можете передать команде флаг -m, который попытается выполнить трёхходовое слияние:
$ git switch -m моя-тема Автослияние frotz
После этого трёхходового слияния локальные изменения не регистрируются в вашем файле индекса, поэтому git diff покажет вам, какие изменения вы сделали с момента верхушки новой ветки.
Чтобы вернуться к предыдущей ветке, на которой мы были до переключения на моя-тема (т.е. ветка "master"):
$ git switch -
Вы можете создать новую ветку из любого коммита. Например, переключитесь на "HEAD~3" и создайте ветку "fixup":
$ git switch -c исправление HEAD~3 Переключено на новую ветку 'исправление'
Если вы хотите создать новую ветку из внешней ветки с тем же именем:
$ git switch новая-тема Ветка `новая-тема` настроена на отслеживание внешней ветки `новая-тема` из `origin` Переключено на новую ветку `новая-тема`
Чтобы переключиться на коммит HEAD~3 для временного осмотра или эксперимента без создания новой ветки:
$ git switch --detach HEAD~3 HEAD сейчас указывает на 9fc9555312 Слияние ветки 'cc/shared-index-permbits'
Если окажется, что всё, что вы сделали, стоит сохранить, вы всегда можете создать для этого новое имя (без переключения):
$ git switch -c хорошие-сюрпризы
КОНФИГУРАЦИЯ
Дальнейшее содержание этого раздела, выборочно повторяет то, что можно найти в документации git-config[1]:
-
checkout.defaultRemote -
Когда вы запускаете
gitcheckout<что-то> илиgitswitch<что-то> и у вас есть только один внешний репозиторий, он может неявно переключиться на отслеживание, например,origin/<что-то>. Это перестаёт работать, как только у вас появляется более одного внешнего репозитория со ссылкой <что-то>. Этот параметр позволяет задать имя предпочтительного внешнего репозитория, который всегда должен побеждать при разрешении неоднозначности. Типичный вариант использования — установить это значение вorigin.В настоящее время это используется git-switch[1] и git-checkout[1], когда
gitcheckout<что-то> илиgitswitch<что-то> будет переключаться на ветку <что-то> в другом внешнем репозитории, и git-worktree[1], когдаgitworktreeaddссылается на внешнюю ветку. Этот параметр может использоваться для других команд или функций, подобных переключению (checkout), в будущем. -
checkout.guess -
Предоставляет значение по умолчанию для опции
--guessили--no-guessвgitcheckoutиgitswitch. См. git-switch[1] и git-checkout[1]. -
checkout.workers -
Количество параллельных рабочих процессов, используемых при обновлении рабочего каталога. По умолчанию — один, т.е. последовательное выполнение. Если установлено значение меньше единицы, Git будет использовать столько рабочих процессов, сколько доступно логических ядер. Этот параметр и
checkout.thresholdForParallelismвлияют на все команды, выполняющие переключение (checkout). Например, checkout, clone, reset, sparse-checkout и т.д.NoteПараллельное переключение обычно обеспечивает лучшую производительность для репозиториев, расположенных на SSD или через NFS. Для репозиториев на вращающихся дисках и/или машинах с небольшим количеством ядер, последовательное переключение по умолчанию часто работает лучше. Размер и уровень сжатия репозитория также могут влиять на то, насколько хорошо работает параллельная версия. -
checkout.thresholdForParallelism -
При выполнении параллельного переключения с небольшим количеством файлов затраты на порождение подпроцессов и межпроцессное взаимодействие могут перевесить выигрыш от распараллеливания. Этот параметр позволяет вам определить минимальное количество файлов, для которых следует пытаться выполнить параллельное переключение. По умолчанию 100.
СМ. ТАКЖЕ
GIT
Является частью пакета git[1]