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.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
ОБЗОР
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]