git-branch
Название
git-branch — вывод списка, создание или удаление веток
Краткое описание
git branch [--color[=<when>] | --no-color] [--show-current]
[-v [--abbrev=<n> | --no-abbrev]]
[--column[=<options>] | --no-column] [--sort=<key>]
[--merged [<commit>]] [--no-merged [<commit>]]
[--contains [<commit>]] [--no-contains [<commit>]]
[--points-at <object>] [--format=<format>]
[(-r|--remotes) | (-a|--all)]
[--list] [<pattern>…]
git branch [--track[=(direct|inherit)] | --no-track] [-f]
[--recurse-submodules] <branch-name> [<start-point>]
git branch (--set-upstream-to=<upstream>|-u <upstream>) [<branch-name>]
git branch --unset-upstream [<branch-name>]
git branch (-m|-M) [<old-branch>] <new-branch>
git branch (-c|-C) [<old-branch>] <new-branch>
git branch (-d|-D) [-r] <branch-name>…
git branch --edit-description [<branch-name>] Описание
Если указано --list или отсутствуют аргументы, не являющиеся параметрами, выводится список существующих веток; текущая ветка выделяется зелёным цветом и отмечается звёздочкой. Ветки, на которые переключены связанные рабочие деревья, выделяются голубым цветом и отмечаются знаком «плюс». Параметр -r включает вывод веток удалённого отслеживания, а параметр -a выводит и локальные ветки, и ветки удалённого отслеживания.
Если указан <pattern>, он используется как шаблон подстановки оболочки, чтобы ограничить вывод соответствующими ветками. Если указано несколько шаблонов, ветка выводится, если соответствует хотя бы одному из них.
Обратите внимание: при указании <pattern> необходимо использовать --list; в противном случае команда может быть интерпретирована как создание ветки.
С параметром --contains выводятся только ветки, содержащие указанный коммит (другими словами, ветки, вершины которых являются потомками указанного коммита); параметр --no-contains инвертирует это условие. С параметром --merged будут выведены только ветки, слитые с указанным коммитом (то есть ветки, вершины которых достижимы из указанного коммита). С параметром --no-merged будут выведены только ветки, не слитые с указанным коммитом. Если аргумент <commit> не указан, по умолчанию используется HEAD (то есть вершина текущей ветки).
Вторая форма команды создаёт новую вершину ветки с именем <branch-name>, указывающую на текущий HEAD или на <start-point>, если он указан. В качестве особого случая для <start-point> можно использовать <rev-A>...<rev-B> как сокращённую запись базового коммита слияния для <rev-A> и <rev-B>, если существует ровно одна база слияния. Можно опустить не более одного из <rev-A> и <rev-B>; в таком случае по умолчанию используется HEAD.
Обратите внимание: эта команда создаёт новую ветку, но не переключает на неё рабочее дерево; для переключения на новую ветку используйте git switch <new-branch>.
Если локальная ветка создаётся от ветки удалённого отслеживания, Git настраивает её (в частности, записи конфигурации branch.<name>.remote и branch.<name>.merge) так, чтобы git pull корректно выполнял слияние из ветки удалённого отслеживания. Это поведение можно изменить с помощью глобального параметра конфигурации branch.autoSetupMerge. Эту настройку можно переопределить с помощью параметров --track и --no-track, а позднее изменить с помощью git branch --set-upstream-to.
С параметром -m или -M ветка <old-branch> будет переименована в <new-branch>. Если для <old-branch> существовал соответствующий журнал ссылок, он будет переименован соответственно <new-branch>, а в журнал ссылок будет добавлена запись о переименовании ветки. Если <new-branch> уже существует, для выполнения переименования необходимо использовать -M.
Параметры -c и -C имеют ту же семантику, что и -m и -M, за исключением того, что ветка не переименовывается, а копируется под новым именем вместе с конфигурацией и журналом ссылок.
С параметром -d или -D ветка <branch-name> будет удалена. Можно указать несколько веток для удаления. Если у ветки есть журнал ссылок, он также будет удалён.
Используйте -r вместе с -d, чтобы удалить ветки удалённого отслеживания. Обратите внимание: удалять ветки удалённого отслеживания имеет смысл только в том случае, если они больше не существуют в удалённом репозитории или если для git fetch настроено не загружать их повторно. См. также подкоманду prune команды git-remote[1], которая позволяет очистить все устаревшие ветки удалённого отслеживания.
Параметры
-
-d -
--delete -
Удалить ветку. Ветка должна быть полностью слита с вышестоящей веткой или с
HEAD, если вышестоящая ветка не была настроена с помощью--trackили--set-upstream-to. -
-D -
Сокращённая запись для
--delete--force. -
--create-reflog -
Создать журнал ссылок для ветки. Это включает запись всех изменений, внесённых в ссылку на ветку, и позволяет использовать выражения sha1, основанные на дате, например <branch-name>
@{yesterday}. Обратите внимание: в репозиториях, не являющихся репозиториями без рабочего дерева, журналы ссылок обычно включены по умолчанию параметром конфигурацииcore.logAllRefUpdates. Отрицательная форма--no-create-reflogпереопределяет только предшествующий параметр--create-reflog, но в настоящее время не отменяет настройкуcore.logAllRefUpdates. -
-f -
--force -
Переместить
<branch-name>на<start-point>, даже если<branch-name>уже существует. Без-fкомандаgitbranchотказывается изменять существующую ветку. В сочетании с-d(или--delete) разрешает удаление ветки независимо от того, слита ли она и указывает ли она вообще на допустимый коммит. В сочетании с-m(или--move) разрешает переименование ветки, даже если новое имя ветки уже существует; то же относится к-c(или--copy).Обратите внимание:
gitbranch-f<branch-name> [<start-point>] отказывается изменять существующую ветку<branch-name>, если на неё переключено другое рабочее дерево, связанное с тем же репозиторием, даже при наличии параметра-f. -
-m -
--move -
Переместить или переименовать ветку вместе с её конфигурацией и журналом ссылок.
-
-M -
Сокращённая запись для
--move--force. -
-c -
--copy -
Копировать ветку вместе с её конфигурацией и журналом ссылок.
-
-C -
Сокращённая запись для
--copy--force. -
--color[=<when>] -
Раскрашивать ветки, чтобы выделять текущую, локальные ветки и ветки удалённого отслеживания. Значением должно быть
always(по умолчанию),neverилиauto. -
--no-color -
Отключить раскраску веток, даже если в файле конфигурации задана раскраска вывода по умолчанию. То же, что и
--color=never. -
-i -
--ignore-case -
Сортировать и фильтровать ветки без учёта регистра.
-
--omit-empty -
Не выводить символ перевода строки после форматированных ссылок, если формат раскрывается в пустую строку.
-
--column[=<options>] -
--no-column -
Выводить список веток в виде столбцов. Синтаксис параметров см. в переменной конфигурации
column.branch.--columnи--no-columnбез параметров эквивалентны соответственноalwaysиnever.Этот параметр применяется только в режиме без подробного вывода.
-
--sort=<key> -
Сортировать по
<key>. Добавьте перед ключом-, чтобы сортировать значения по убыванию. Параметр--sort=<key> можно указать несколько раз; в таком случае последний ключ становится основным. Поддерживаются те же ключи, что и в git-for-each-ref[1]. Порядок сортировки по умолчанию определяется значением переменнойbranch.sort, если она задана, или сортировкой по полному имени ссылки (включая префиксrefs/...). Сначала выводится отсоединённыйHEAD(если он есть), затем локальные ветки и, наконец, ветки удалённого отслеживания. См. git-config[1]. -
-r -
--remotes -
Вывести список веток удалённого отслеживания или удалить их (если используется вместе с
-d). Сочетайте с--list, чтобы сопоставить необязательные шаблоны. -
-a -
--all -
Вывести список веток удалённого отслеживания и локальных веток. Сочетайте с
--list, чтобы сопоставить необязательные шаблоны. -
-l -
--list -
Вывести список веток. Если указаны необязательные <pattern>..., например
gitbranch--listmaint-*', выводятся только ветки, соответствующие шаблонам. -
--show-current -
Вывести имя текущей ветки. В состоянии отсоединённого
HEADничего не выводится. -
-v -
-vv -
--verbose -
В режиме вывода списка показать для каждой вершины sha1 и строку темы коммита, а также отношение к вышестоящей ветке (если она есть). Если параметр указан дважды, также вывести путь связанного рабочего дерева (если оно есть) и имя вышестоящей ветки (см. также
gitremoteshow<remote>). Обратите внимание: путь дляHEADтекущего рабочего дерева не выводится (в качестве пути всегда используется текущий каталог). -
-q -
--quiet -
Не выводить лишние сообщения при создании или удалении ветки, подавляя сообщения, не связанные с ошибками.
-
--abbrev=<n> -
В подробном списке, где выводится имя объекта коммита, показать кратчайший префикс длиной не менее
<n>шестнадцатеричных цифр, однозначно указывающий на объект. Значение по умолчанию — 7; его можно переопределить параметром конфигурацииcore.abbrev. -
--no-abbrev -
Выводить в списке полные значения sha1, не сокращая их.
-
-t -
--track[=(direct|inherit)] -
При создании новой ветки задать записи конфигурации
branch.<name>.remoteиbranch.<name>.merge, чтобы настроить отслеживание «вышестоящей» ветки для новой ветки. Эта конфигурация указывает Git показывать связь между двумя ветками в командахgitstatusиgitbranch-v. Кроме того, она указываетgitpullбез аргументов получать изменения из вышестоящей ветки, когда выполнено переключение на новую ветку.Конкретная вышестоящая ветка выбирается в зависимости от необязательного аргумента:
-t,--trackили--track=directозначает, что в качестве вышестоящей используется сама ветка начальной точки;--track=inheritозначает копирование конфигурации вышестоящей ветки из ветки начальной точки.Переменная конфигурации
branch.autoSetupMergeзадаёт поведение командgitswitch,gitcheckoutиgitbranch, если не указаны ни--track, ни--no-track:Параметр по умолчанию
trueдействует так, как если бы был указан--track=direct, когда начальная точка является веткой удалённого отслеживания.falseдействует так, как если бы был указан--no-track.alwaysдействует так, как если бы был указан--track=direct.inheritдействует так, как если бы был указан--track=inherit.simpleдействует так, как если бы был указан--track=direct, только если<start-point>является веткой удалённого отслеживания, а новая ветка имеет то же имя, что и удалённая ветка.Дополнительные сведения об использовании параметров
branch.<name>.remoteиbranch.<name>.mergeсм. в git-pull[1] и git-config[1]. -
--no-track -
Не настраивать вышестоящую ветку, даже если задана переменная конфигурации
branch.autoSetupMerge. -
--recurse-submodules -
ЭТОТ ПАРАМЕТР ЭКСПЕРИМЕНТАЛЬНЫЙ! Если включён параметр
submodule.propagateBranches, текущая команда рекурсивно выполняется в подмодулях. См.submodule.propagateBranchesв git-config[1]. В настоящее время поддерживается только создание веток.При создании ветки с этим параметром новая ветка
<branch-name>будет создана в суперпроекте и во всех подмодулях из<start-point>суперпроекта. В подмодулях ветка будет указывать на коммит подмодуля, указанный в<start-point>суперпроекта, но данные отслеживания ветки будут настроены на основе веток и удалённых репозиториев подмодуля; например,gitbranch--recurse-submodulestopicorigin/mainсоздаст в подмодуле ветку "topic", указывающую на коммит подмодуля в "origin/main" суперпроекта, но отслеживающую "origin/main" подмодуля. -
--set-upstream -
Этот параметр больше не поддерживается из-за запутанного синтаксиса. Вместо него используйте
--trackили--set-upstream-to. -
-u<upstream> -
--set-upstream-to=<upstream> -
Настроить данные отслеживания для
<branch-name>так, чтобы<upstream>считалась вышестоящей веткой для<branch-name>. Если<branch-name>не указан, по умолчанию используется текущая ветка. -
--unset-upstream -
Удалить сведения о вышестоящей ветке для
<branch-name>. Если ветка не указана, по умолчанию используется текущая ветка. -
--edit-description -
Открыть редактор и изменить текстовое описание назначения ветки, используемое различными другими командами (например,
format-patch,request-pullиmerge, если эта функция включена). Описание может состоять из нескольких строк. -
--contains[<commit>] -
Выводить только ветки, содержащие
<commit>(если он не указан, используетсяHEAD). Подразумевает--list. -
--no-contains[<commit>] -
Выводить только ветки, не содержащие
<commit>(если он не указан, используетсяHEAD). Подразумевает--list. -
--merged[<commit>] -
Выводить только ветки, вершины которых достижимы из
<commit>(если он не указан, используетсяHEAD). Подразумевает--list. -
--no-merged[<commit>] -
Выводить только ветки, вершины которых недостижимы из
<commit>(если он не указан, используетсяHEAD). Подразумевает--list. -
--points-at<object> -
Выводить только ветки, указывающие на
<object>. -
--format<format> -
Строка, подставляющая значения
%(fieldname) для отображаемой ссылки на ветку и объекта, на который она указывает.<format>совпадает с тем, что используется в git-for-each-ref[1]. - <branch-name>
-
Имя создаваемой или удаляемой ветки. Новое имя ветки должно пройти все проверки, определённые в git-check-ref-format[1]. Некоторые из этих проверок могут ограничивать допустимые символы в имени ветки.
- <start-point>
-
Новая вершина ветки будет указывать на этот коммит. Его можно задать как имя ветки, идентификатор коммита или тег. Если этот параметр опущен, вместо него используется текущий
HEAD. - <old-branch>
-
Имя существующей ветки. Если этот параметр опущен, вместо него используется имя текущей ветки.
- <new-branch>
-
Новое имя существующей ветки. Применяются те же ограничения, что и для
<branch-name>.
Конфигурация
pager.branch учитывается только при перечислении веток, то есть когда используется или подразумевается --list. По умолчанию используется программа постраничного просмотра. См. git-config[1].
Всё, что находится выше этой строки в данном разделе, не включено в документацию git-config[1]. Далее следует тот же материал, что и в ней:
-
branch.autoSetupMerge -
Указывает
gitbranch,gitswitchиgitcheckoutнастраивать новые ветки так, чтобы git-pull[1] корректно выполнял слияние с исходной веткой. Обратите внимание: даже если этот параметр не задан, такое поведение можно выбрать для каждой ветки отдельно с помощью параметров--trackи--no-track. По умолчанию для этого параметра установлено значениеtrue. Допустимые значения:-
false -
автоматическая настройка не выполняется
-
true -
автоматическая настройка выполняется, если исходной точкой является ветка отслеживания удалённого репозитория
-
always -
автоматическая настройка выполняется, если исходной точкой является локальная ветка или ветка отслеживания удалённого репозитория
-
inherit -
если для исходной точки настроено отслеживание, эта настройка копируется в новую ветку
-
simple -
автоматическая настройка выполняется только в том случае, если исходной точкой является ветка отслеживания удалённого репозитория и новая ветка имеет то же имя, что и удалённая ветка.
-
-
branch.autoSetupRebase -
Если новая ветка создаётся с помощью
gitbranch,gitswitchилиgitcheckoutи отслеживает другую ветку, эта переменная указывает Git настроить выполнение перебазирования вместо слияния при получении изменений (см.branch.<name>.rebase). Допустимые значения:-
never -
перебазирование никогда автоматически не включается.
-
local -
перебазирование включается для отслеживаемых веток других локальных веток.
-
remote -
перебазирование включается для отслеживаемых веток веток отслеживания удалённых репозиториев.
-
always -
перебазирование включается для всех отслеживаемых веток.
Подробные сведения о настройке отслеживания одной веткой другой ветки см. в разделе
branch.autoSetupMerge. По умолчанию для этого параметра установлено значениеnever. -
-
branch.sort -
Эта переменная управляет порядком сортировки веток, отображаемых командой git-branch[1]. Если параметр
--sort=<value> не указан, значение этой переменной используется по умолчанию. Допустимые значения см. в названиях полей git-for-each-ref[1]. -
branch.<name>.remote -
Находясь в ветке
<name>, этот параметр указываетgitfetchиgitpush, с какого удалённого репозитория получать изменения или в какой отправлять их. Удалённый репозиторий для отправки изменений можно переопределить с помощьюremote.pushDefault(для всех веток). Удалённый репозиторий для отправки изменений из текущей ветки можно дополнительно переопределить с помощьюbranch.<name>.pushRemote. Если удалённый репозиторий не настроен или если вы не находитесь ни в одной ветке, а в репозитории определено несколько удалённых репозиториев, для получения изменений по умолчанию используетсяorigin, а для отправки —remote.pushDefault. Кроме того,.(точка) обозначает текущий локальный репозиторий (репозиторий с точкой); см. заключительное примечание ниже кbranch.<name>.merge. -
branch.<name>.pushRemote -
Находясь в ветке
<name>, этот параметр переопределяетbranch.<name>.remoteдля отправки изменений. Он также переопределяетremote.pushDefaultпри отправке изменений из ветки<name>. Если вы получаете изменения из одного места (например, из вышестоящего репозитория), а отправляете в другое (например, в собственный репозиторий для публикации), задайтеremote.pushDefault, чтобы указать удалённый репозиторий для отправки изменений из всех веток, а этот параметр используйте для переопределения настройки для отдельной ветки. -
branch.<name>.merge -
Вместе с
branch.<name>.remoteопределяет вышестоящую ветку для указанной ветки. Параметр указываетgitfetch/gitpull/gitrebase, с какой веткой выполнять слияние, и также может влиять наgitpush(см.push.default). Находясь в ветке<name>, он указываетgitfetchспецификацию ссылки по умолчанию, которую следует пометить для слияния вFETCH_HEAD. Значение обрабатывается как часть спецификации ссылки, указывающая удалённый репозиторий, и должно соответствовать ссылке, получаемой из удалённого репозитория, заданного параметромbranch.<name>.remote. Информация о слиянии используется командойgitpull(которая сначала вызываетgitfetch) для поиска ветки слияния по умолчанию. Без этого параметраgitpullпо умолчанию выполняет слияние по первой полученной спецификации ссылки. Укажите несколько значений, чтобы выполнить слияние типа «осьминог». Если вы хотите настроитьgitpullтак, чтобы он выполнял слияние в<name>из другой ветки локального репозитория, укажите нужную ветку вbranch.<name>.mergeи задайте дляbranch.<name>.remoteотносительный путь.(точку). -
branch.<name>.mergeOptions -
Задаёт параметры по умолчанию для слияния в ветку
<name>. Синтаксис и поддерживаемые параметры совпадают с таковыми у git-merge[1], однако значения параметров, содержащие пробельные символы, в настоящее время не поддерживаются. -
branch.<name>.rebase -
Если значение равно true, при выполнении команды
gitpullветка<name>перебазируется поверх полученной ветки вместо слияния с веткой по умолчанию из удалённого репозитория по умолчанию. О настройке такого поведения без привязки к конкретной ветке см.pull.rebase.Если значение равно
merges(или простоm), командеgitrebaseпередаётся параметр--rebase-merges, чтобы локальные коммиты слияния включались в перебазирование (подробности см. в git-rebase[1]).Если значение равно
interactive(или простоi), перебазирование выполняется в интерактивном режиме.ПРИМЕЧАНИЕ: эта операция может быть опасной; не используйте её, если не понимаете возможных последствий (подробности см. в git-rebase[1]).
-
branch.<name>.description -
Описание ветки; его можно отредактировать с помощью
gitbranch--edit-description. Описание ветки автоматически добавляется в сопроводительное письмоformat-patchили в сводкуrequest-pull.
Примеры
- Начало разработки от известного тега
-
$ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6 $ cd my2.6 $ git branch my2.6.14 v2.6.14 (1) $ git switch my2.6.14
-
Этот шаг и следующий можно объединить в один: "checkout -b my2.6.14 v2.6.14".
-
- Удаление ненужной ветки
-
$ git clone git://git.kernel.org/.../git.git my.git $ cd my.git $ git branch -d -r origin/todo origin/html origin/man (1) $ git branch -D test (2)
-
Удаляет ветки отслеживания удалённого репозитория "todo", "html" и "man". Следующая команда
gitfetchилиgitpullсоздаст их снова, если не настроить обратное. См. git-fetch[1]. -
Удаляет ветку "test", даже если в ветке "master" (или в любой другой текущей выбранной ветке) нет всех коммитов из ветки test.
-
- Перечисление веток определённого удалённого репозитория
-
$ git branch -r -l '<remote>/<pattern>' (1) $ git for-each-ref 'refs/remotes/<remote>/<pattern>' (2)
-
Использование
-aсмешало бы<remote>с любыми локальными ветками, имена которых случайно начинаются с того же шаблона<remote>. -
for-each-refподдерживает широкий набор параметров. См. git-for-each-ref[1]
-
Как правило, шаблоны нужно заключать в кавычки.
Примечания
Если вы создаёте ветку, на которую хотите сразу переключиться, проще использовать команду git switch с параметром -c, чтобы выполнить то же действие одной командой.
Параметры --contains, --no-contains, --merged и --no-merged выполняют четыре связанные, но различные задачи:
-
--contains<commit> используется для поиска всех веток, требующих особого внимания, если<commit>будет перебазирован или изменён, поскольку эти ветки содержат указанный<commit>. -
--no-contains<commit> выполняет обратную операцию, то есть находит ветки, не содержащие указанный<commit>. -
--mergedиспользуется для поиска всех веток, которые можно безопасно удалить, поскольку они полностью входят в составHEAD. -
--no-mergedиспользуется для поиска веток, которые можно рассматривать как кандидатов на слияние сHEAD, поскольку они не полностью входят в составHEAD.
При объединении нескольких фильтров --contains и --no-contains отображаются только ссылки, содержащие хотя бы один из коммитов --contains и не содержащие ни одного из коммитов --no-contains.
При объединении нескольких фильтров --merged и --no-merged отображаются только ссылки, достижимые хотя бы из одного коммита --merged и не достижимые ни из одного коммита --no-merged.
См. также
git-check-ref-format[1], git-fetch[1], git-remote[1], раздел «Понимание истории: что такое ветка?» в руководстве пользователя Git.
branch
© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-branch