Spec-Zone.ru › Git

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 команда git branch отказывается изменять существующую ветку. В сочетании с -d (или --delete) разрешает удаление ветки независимо от того, слита ли она и указывает ли она вообще на допустимый коммит. В сочетании с -m (или --move) разрешает переименование ветки, даже если новое имя ветки уже существует; то же относится к -c (или --copy).

Обратите внимание: git branch -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>..., например git branch --list maint-*', выводятся только ветки, соответствующие шаблонам.

--show-current

Вывести имя текущей ветки. В состоянии отсоединённого HEAD ничего не выводится.

-v
-vv
--verbose

В режиме вывода списка показать для каждой вершины sha1 и строку темы коммита, а также отношение к вышестоящей ветке (если она есть). Если параметр указан дважды, также вывести путь связанного рабочего дерева (если оно есть) и имя вышестоящей ветки (см. также git remote show <remote>). Обратите внимание: путь для HEAD текущего рабочего дерева не выводится (в качестве пути всегда используется текущий каталог).

-q
--quiet

Не выводить лишние сообщения при создании или удалении ветки, подавляя сообщения, не связанные с ошибками.

--abbrev=<n>

В подробном списке, где выводится имя объекта коммита, показать кратчайший префикс длиной не менее <n> шестнадцатеричных цифр, однозначно указывающий на объект. Значение по умолчанию — 7; его можно переопределить параметром конфигурации core.abbrev.

--no-abbrev

Выводить в списке полные значения sha1, не сокращая их.

-t
--track[=(direct|inherit)]

При создании новой ветки задать записи конфигурации branch.<name>.remote и branch.<name>.merge, чтобы настроить отслеживание «вышестоящей» ветки для новой ветки. Эта конфигурация указывает Git показывать связь между двумя ветками в командах git status и git branch -v. Кроме того, она указывает git pull без аргументов получать изменения из вышестоящей ветки, когда выполнено переключение на новую ветку.

Конкретная вышестоящая ветка выбирается в зависимости от необязательного аргумента: -t, --track или --track=direct означает, что в качестве вышестоящей используется сама ветка начальной точки; --track=inherit означает копирование конфигурации вышестоящей ветки из ветки начальной точки.

Переменная конфигурации branch.autoSetupMerge задаёт поведение команд git switch, git checkout и git branch, если не указаны ни --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> суперпроекта, но данные отслеживания ветки будут настроены на основе веток и удалённых репозиториев подмодуля; например, git branch --recurse-submodules topic origin/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

Указывает git branch, git switch и git checkout настраивать новые ветки так, чтобы git-pull[1] корректно выполнял слияние с исходной веткой. Обратите внимание: даже если этот параметр не задан, такое поведение можно выбрать для каждой ветки отдельно с помощью параметров --track и --no-track. По умолчанию для этого параметра установлено значение true. Допустимые значения:

false

автоматическая настройка не выполняется

true

автоматическая настройка выполняется, если исходной точкой является ветка отслеживания удалённого репозитория

always

автоматическая настройка выполняется, если исходной точкой является локальная ветка или ветка отслеживания удалённого репозитория

inherit

если для исходной точки настроено отслеживание, эта настройка копируется в новую ветку

simple

автоматическая настройка выполняется только в том случае, если исходной точкой является ветка отслеживания удалённого репозитория и новая ветка имеет то же имя, что и удалённая ветка.

branch.autoSetupRebase

Если новая ветка создаётся с помощью git branch, git switch или git checkout и отслеживает другую ветку, эта переменная указывает 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>, этот параметр указывает git fetch и git push, с какого удалённого репозитория получать изменения или в какой отправлять их. Удалённый репозиторий для отправки изменений можно переопределить с помощью 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 определяет вышестоящую ветку для указанной ветки. Параметр указывает git fetch/git pull/git rebase, с какой веткой выполнять слияние, и также может влиять на git push (см. push.default). Находясь в ветке <name>, он указывает git fetch спецификацию ссылки по умолчанию, которую следует пометить для слияния в FETCH_HEAD. Значение обрабатывается как часть спецификации ссылки, указывающая удалённый репозиторий, и должно соответствовать ссылке, получаемой из удалённого репозитория, заданного параметром branch.<name>.remote. Информация о слиянии используется командой git pull (которая сначала вызывает git fetch) для поиска ветки слияния по умолчанию. Без этого параметра git pull по умолчанию выполняет слияние по первой полученной спецификации ссылки. Укажите несколько значений, чтобы выполнить слияние типа «осьминог». Если вы хотите настроить git pull так, чтобы он выполнял слияние в <name> из другой ветки локального репозитория, укажите нужную ветку в branch.<name>.merge и задайте для branch.<name>.remote относительный путь . (точку).

branch.<name>.mergeOptions

Задаёт параметры по умолчанию для слияния в ветку <name>. Синтаксис и поддерживаемые параметры совпадают с таковыми у git-merge[1], однако значения параметров, содержащие пробельные символы, в настоящее время не поддерживаются.

branch.<name>.rebase

Если значение равно true, при выполнении команды git pull ветка <name> перебазируется поверх полученной ветки вместо слияния с веткой по умолчанию из удалённого репозитория по умолчанию. О настройке такого поведения без привязки к конкретной ветке см. pull.rebase.

Если значение равно merges (или просто m), команде git rebase передаётся параметр --rebase-merges, чтобы локальные коммиты слияния включались в перебазирование (подробности см. в git-rebase[1]).

Если значение равно interactive (или просто i), перебазирование выполняется в интерактивном режиме.

ПРИМЕЧАНИЕ: эта операция может быть опасной; не используйте её, если не понимаете возможных последствий (подробности см. в git-rebase[1]).

branch.<name>.description

Описание ветки; его можно отредактировать с помощью git branch --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
  1. Этот шаг и следующий можно объединить в один: "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)
  1. Удаляет ветки отслеживания удалённого репозитория "todo", "html" и "man". Следующая команда git fetch или git pull создаст их снова, если не настроить обратное. См. git-fetch[1].

  2. Удаляет ветку "test", даже если в ветке "master" (или в любой другой текущей выбранной ветке) нет всех коммитов из ветки test.

Перечисление веток определённого удалённого репозитория
$ git branch -r -l '<remote>/<pattern>'                 (1)
$ git for-each-ref 'refs/remotes/<remote>/<pattern>'    (2)
  1. Использование -a смешало бы <remote> с любыми локальными ветками, имена которых случайно начинаются с того же шаблона <remote>.

  2. 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API