Алексей Махоткин

домашняя страница

Git-branch

git-branch(1) Manual Page

NAME

git-branch - Создание, удаление и отображение списка веток

Кратко

git branch [--color[=<когда>] | --no-color] [-r | -a]
        [--list] [-v [--abbrev=<длина> | --no-abbrev]]
        [--column[=<опции>] | --no-column]
        [(--merged | --no-merged | --contains) [<коммит>]] [<шаблон>…]
git branch [--set-upstream | --track | --no-track] [-l] [-f] <имя-ветки> [<начальная-точка>]
git branch (--set-upstream-to=<upstream> | -u <upstream>) [<имя-ветки>]
git branch --unset-upstream [<имя-ветки>]
git branch (-m | -M) [<старая-ветка>] <новая-ветка>
git branch (-d | -D) [-r] <имя-ветки>…
git branch --edit-description [<имя-ветки>]

Описание

При указании опции --list, или если указаны аргументы, не являющиеся опциями, команда показывает существующие ветки; текущая ветка помечена звездочкой. Опция -r заставляет показать список нелокальных веток, а опция -a — как локальные, так и нелокальные ветки. Если указан аргумент <шаблон>, то он интерпретируется как шаблон в стиле shell, и показываются только ветки, соответствующие этому шаблону. Если указано несколько шаблонов, то показываются ветки, которые соответствуют любому из них. Заметьте, что при использовании аргумента <шаблон> вам придется использовать опцию --list; в противном случае будет выполнена команда создания ветки.

При использовании опции --contains будут показаны только ветки, в которых содержится указанный коммит (другими словами, ветки, чей хвост является потомком указанного коммита. С опцией --merged будут показаны только ветки, слитые с указанным коммитом (то есть те ветки, чьи хвосты доступны из указанного коммита). Опция --no-merged показывает ветки, которые не слиты в указанный коммит. Если аргумент <коммит> не указан, то используется HEAD (то есть хвост текущей ветки).

Второй вариант команды используется для создания новой ветки, которая называется <имя-ветки>, чей хвост совпадает с текущим HEAD, или же с коммитом <начальная-точка>.

Обратите внимание, что эта команда создает новую ветку, но не переключает на нее рабочую копию; для переключения между ветками используется команда “git checkout <новая-ветка>”.

Когда локальная ветка создается на базе нелокальной, Git конфигурирует ее так, чтобы git pull автоматически сливал ее с нелокальной веткой. Это поведение можно изменить с помощью глобального флага конфигурации branch.autosetupmerge. Эту настройку можно переопределить с помощью опций --track и --no-track, и изменить в дальнейшем с помощью git branch --set-upstream-to.

С опциями -m и -M ветка <старая-ветка> будет переименована в <новая-ветка>. Если у <старой-ветки> есть соответствующий reflog, то он переименовывается, чтобы соответствовать <новой-ветке>, и создается reflog-запись, отражающая переименование. Если <новая-ветка> уже существует, то нужно использовать опцию -M, а иначе переименование не произойдет.

С опциями -d и -D будет удалена ветка <имя-ветки>. Можно указать несколько веток на удаление. Если у ветки есть reflog, то он также будет удален.

Опцию -r можно использовать вместе с -d для удаления нелокальных веток. Обратите внимание, что удалять нелокальные ветки имеет смысл только если они более не существуют в нелокальном репозитории или если команда git fetch сконфигурирована так, чтобы не скачивать их заново. См. также суб-команду prune команды git-remote(1), которая предназначена для удаления устаревших следящих веток.

Опции

-d
--delete

Удаляет ветку. Ветка должна быть полностью слита в соответствующую нелокальную ветку, или в HEAD, если ей не соответствуют нелокальные ветки (установленные с помощью --track или --set-upstream.

-D

Удаляет ветку, не обращая внимания на то, слита ли она или нет.

-l
--create-reflog

Создает reflog ветки. После этого все изменения на ветке будут записываться, что позволяет использовать фильтр по дате, например “<имя-ветки>@{yesterday}”. Обратите внимание, что в нормальных (non-bare) репозиториях reflog’и по умолчанию разрешены параметром конфигурации core.logallrefupdates.

-f
--force

Пересоздает ветку <имя-ветки> на базе <начальной-точки>, даже если <имя-ветки> уже существует. Без этого ключа git branch откажется трогать существующую ветку.

-m
--move

Переименовывает ветку и соответствующий reflog.

-M

Переименовывает ветку даже если ветка с новым именем уже существует.

--color[=<when>]

Раскрашивает разными цветами текущую, локальные и следящие ветки. Можно использовать значения always («всегда», по умолчанию), never («никогда») или auto («автоматически»).

--no-color

Отключает раскрашивание веток, даже если в конфигурационном файле сказано обратное. Равносильно --color=never.

--column[=<options>]
--no-column

Показывает список веток в несколько колонок. См. переменную конфигураци column.branch, синтаксис которой используется здесь. Опции --column и --no-column эквивалентны параметрам always и never, соответственно.

Эта опция используется только если не указан параметр -v.

-r
--remotes

Показывает список (или удаляет, если используется вместе с опцией -d) следящих веток.

-a
--all

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

--list

Показывает список веток. Иначе git branch <шаблон> будет пытаться создать новую ветку: для вывода списка используйте git branch --list <шаблон>.

-v
-vv
--verbose

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

-q
--quiet

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

--abbrev=<length>

Изменяет минимальную длину sha1, используемую в выдаче. Значение по умолчанию равно 7, и его можно переопределить с помощью конфигурационной переменной core.abbrev.

--no-abbrev

Показывает полную sha1, не сокращая их.

-t
--track

При создании новой ветки делает так, чтобы указанная начальная точка стала “апстримом” для новой ветки. При этом git будет показывать связь между двумя ветками в git status и git branch -v. Более того, git pull без аргументов будет забирать новые коммиты из апстрима при извлечении новой ветки.

Это поведение включено по умолчанию, когда начальная точка указывает на следящую ветку. Установите конфигурационную переменную branch.autosetupmerge в значение false, если хотите, чтобы git checkout и git branch всегда вели себя как если бы был указан ключ --no-track. Установите ее значение в always, если хотите, чтобы это поведение использовалось, даже если в качестве начальной точки используется локальная ветка.

--no-track

Не создавать апстрим-конфигурацию, даже если конфигурационная переменная branch.autosetupmerge установлена в true.

--set-upstream

Если указанная ветка не существует (или при дополнительном указании --force), то ведет себя в точности как --track. В противном случае конфигурирует апстрим, не меняя точку, на которую указывает ветка.

-u <upstream>
--set-upstream-to=<upstream>

Устанавливает информацию о ветке так, чтобы она стала веткой, следящей за указанным <upstream>. Если <имя-ветки> не указано, то используется текущая ветка.

--unset-upstream

Удаляет информацию об апстриме ветки <имя-ветки>. Если имя не указано, то используется текущая ветка.

--edit-description

Открывает в редакторе файл с текстом, который описывает назначение ветки. Эта информация используется различными командами, например request-pull).

--contains [<commit>]

Показывает только ветки, содержащие указанный коммит (либо HEAD, если не указано явно). Также включает --list.

--merged [<commit>]

Показывает только ветки, чьи хвосты являются предками указанного коммиты (либо HEAD, если не указано явно). Также включает --list.

--no-merged [<commit>]

Показывает только ветки, чьи хвосты НЕ являются предками указанного коммиты (либо HEAD, если не указано явно). Также включает --list.

<имя-ветки>

Имя ветки, которую надо создать или удалить. Новое имя должно удовлетворять всем условиям, перечисленным в git-check-ref-format(1). Некоторые из этих условий ограничивают набор символов, допустимый в имени ветки.

<начальная-точка>

Хвост новой ветки будет указывать на этот коммит. Его можно указать в виде названия ветки, идентификатора коммита либо в виде метки. Если этот параметр не указан, то используется текущее содержимое HEAD.

<старая-ветка>

Имя существующей ветки, которое надо переименовать.

<новая-ветка>

Новое имя существующей ветки. К нему применяются те же ограничения, что и к <имени-ветки>.

Примеры

Начинаем разработку от известного тэга
$ 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 checkout 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”. Последующие команды fetch или pull создадут их заново, если не запретить им этого. См. git-fetch(1).

  2. Удаляет ветку “test”, даже если в ветке “master” (или на той, что сейчас извлечена) находятся не все коммиты с ветки “test”.

Замечания

Если вы создаете ветку и сразу же хотите извлечь ее, то лучше использовать ключ -b команды checkout — с ней эта команда именно так и сделает.

Ключи --contains, --merged и --no-merged служат трем близким, но разным целям:

  • `--contains <коммит> используется, чтобы найти все ветки, которые потребуют внимания, если <коммит> будет перебазирован или скорректирован — именно такие ветки содержат этот <коммит>.

  • --merged используется, чтобы найти все ветки, которые можно безопасно удалить, потому что они полностью слиты на HEAD.

  • --no-merged используется, чтобы найти ветки, которые являются кандидатом на слияние в HEAD — именно такие ветки не полностью слиты на HEAD.

См. также

Git

Входит в пакет программ git(1)


Last updated 2013-02-25 22:54:42 MSK

Comments