## Name

git-branch - 列出，创建或删除分支

## 概要

    git branch [--color[=<when>] | --no-color] [-r | -a]        [--list] [-v [--abbrev=<length> | --no-abbrev]]        [--column[=<options>] | --no-column] [--sort=<key>]        [(--merged | --no-merged) [<commit>]]        [--contains [<commit]] [--no-contains [<commit>]]        [--points-at <object>] [--format=<format>] [<pattern>…]git branch [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]git branch --unset-upstream [<branchname>]git branch (-m | -M) [<oldbranch>] <newbranch>git branch (-d | -D) [-r] <branchname>…

    git branch --edit-description [<branchname>]

## 描述

如果`--list`给出，或者如果没有非选项参数，则列出现有分支; 当前分支将突出显示星号。选项`-r`会导致远程追踪分支被列出，选项`-a`显示本地和远程分支。如果`<pattern>`给出a，则将其用作外壳通配符，以将输出限制为匹配的分支。如果给出多个模式，则显示一个分支，如果它匹配任何模式。请注意，提供时`<pattern>`，您必须使用`--list`; 否则该命令被解释为分支创建。

与`--contains`，仅显示包含指定提交的分支（换句话说，其提示提交的分支是指定提交的后代），将其`--no-contains`反转。使用时`--merged`，只会将分支合并到指定的提交中（即，其提交提交可从指定的提交中获得的分支）将被列出。随着`--no-merged`唯一分支机构不合并到一个名为承诺将陆续上市。如果缺少<commit>参数，则默认为`HEAD`（即当前分支的尖端）。

命令的第二种形式创建一个名为<branchname>的新分支头，它指向当前`HEAD`或<start-point>（如果给出）。

请注意，这将创建新的分支，但不会将工作树切换到它; 使用“git checkout <newbranch>”切换到新分支。

当一个本地分支从一个远程跟踪分支启动时，Git设置分支（特别是`branch.<name>.remote`和`branch.<name>.merge`配置条目），以便`git pull`从远程跟踪分支适当合并。此行为可能通过全局`branch.autoSetupMerge`配置标志进行更改。该设置可以通过使用`--track`和`--no-track`选项来覆盖，并在稍后使用`git branch --set-upstream-to`。

使用`-m`或`-M`选项，<oldbranch>将被重命名为<newbranch>。如果<oldbranch>具有相应的reflog，则将其重命名为匹配<newbranch>，并且会创建reflog条目以记住分支重命名。如果<newbranch>存在，-M必须用于强制重命名发生。

带有`-d`或`-D`选项，`<branchname>`将被删除。您可以指定多个分支进行删除。如果分支当前有reflog，则reflog也将被删除。

使用`-r`连同`-d`删除远程跟踪分支。请注意，如果远程跟踪分支不再存在于远程存储库中，或者`git fetch`已配置为不再获取它们，则仅删除远程跟踪分支是有意义的。另请参阅`prune`git-remote [1] 的子命令，以清除所有过时的远程跟踪分支。

## 选项

-d --delete

删除分支。该分支必须完全合并到其上游分支中，或者`HEAD`如果没有上游设置为`--track`或`--set-upstream`。

-D

快捷键`--delete --force`。

-l --create-reflog

创建分支的reflog。这将激活对分支ref的所有更改的记录，从而可以使用基于日期的sha1表达式，如“<branchname> @ {yesterday}”。请注意，在非裸仓库中，configlog `core.logAllRefUpdates`选项通常默认启用reflog 。否定形式`--no-create-reflog`只会覆盖较早的形式`--create-reflog`，但目前并不否定这种设置`core.logAllRefUpdates`。

-f --force

如果<branchname>已存在，请将<branchname>重置为<startpoint>。没有`-f` `git branch`拒绝改变现有的分支。结合`-d`（或`--delete`），允许删除分支，而不考虑其合并状态。结合`-m`（或`--move`），即使新分支名称已存在，也允许重命名分支。

-m --move

移动/重命名分支和相应的reflog。

-M

快捷键`--move --force`。

--color=<when>

颜色分支突出显示当前，本地和远程跟踪分支。该值必须始终（默认），永不，或自动。

--no-color

关闭分支颜色，即使配置文件将默认设置为颜色输出。和...一样`--color=never`。

-i --ignore-case

排序和过滤分支不区分大小写。

--column=<options> --no-column

在列中显示分支列表。有关选项语法，请参阅配置变量column.branch。`--column`与`--no-column`不带选项相当于`always`和`never`分别。

该选项仅适用于非详细模式。

-r --remotes

列出或删除（如果与-d一起使用）远程跟踪分支。

-a --all

列出远程追踪分行和当地分行。

--list

列出分支。使用可选项`<pattern>...`，例如`git branch --list 'maint-*'`，仅列出与模式匹配的分支。

这不应与此混淆`git branch -l <branchname>`，它会创建一个以`<branchname>`reflog 命名的分支。详情见`--create-reflog`上文。

-v -vv --verbose

在列表模式下，显示sha1并为每个头提交主题行，以及与上游分支（如果有）的关系。如果给出两次，也打印上游分支的名称（另请参阅`git remote show <remote>`）。

-q --quiet

创建或删除分支时更安静，抑制非错误消息。

--abbrev=<length>

改变输出列表中sha1的最小显示长度。默认值是7，可以由`core.abbrev`config选项覆盖。

--no-abbrev

在输出列表中显示完整的sha1，而不是缩写它们。

-t --track

创建新分支时，设置`branch.<name>.remote`和`branch.<name>.merge`配置条目以将起点分支标记为新分支的“上游”。这个配置会告诉git显示in `git status`和in两个分支之间的关系`git branch -v`。此外，它在`git pull`没有参数的情况下指示新分支签出时从上游撤出。

当起始点是远程跟踪分支时，此行为是默认行为。`false`如果需要`git checkout`，`git branch`可以将branch.autoSetupMerge配置变量设置为并且始终表现得像`--no-track`给定的一样。`always`如果您想在起点为本地或远程跟踪分支时想要此行为，请将其设置为。

--no-track

即使branch.autoSetupMerge配置变量为true，也不要设置“上游”配置。

--set-upstream

如果指定的分支尚不存在或者`--force`已经给出，则完全相同`--track`。否则，`--track`在创建分支时设置配置，除非分支指向的地方不更改。

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

设置<branchname>的跟踪信息，以便<upstream>被视为<branchname>的上游分支。如果未指定<branchname>，则默认为当前分支。

--unset-upstream

删除<branchname>的上游信息。如果未指定分支，则默认为当前分支。

--edit-description

打开一个编辑器，编辑文本解释分支是干什么用的，通过其他各种命令使用（例如`format-patch`，`request-pull`和`merge`（如果启用））。可以使用多行解释。

--contains <commit>

只列出包含指定提交的分支（如果未指定，则为HEAD）。意味着`--list`。

--no-contains <commit>

只列出不包含指定提交的分支（如果未指定，则为HEAD）。意味着`--list`。

--merged <commit>

仅列出可从指定提交中获得提示的分支（如果未指定，则为HEAD）。暗示`--list`，不符合`--no-merged`。

--no-merged <commit>

仅列出提示无法从指定提交中获得的分支（如果未指定，则为HEAD）。暗示`--list`，不符合`--merged`。

<branchname>

要创建或删除的分支的名称。新的分支名称必须通过由git-check-ref-format [1]定义的所有检查。其中一些检查可能会限制分支名称中允许的字符。

<start-point>

新的分支头将指向这个提交。它可以作为分支名称，提交标识或标签给出。如果省略此选项，则将使用当前的HEAD。

<oldbranch>

要重命名的现有分支的名称。

<newbranch>

现有分支的新名称。与<branchname>相同的限制适用。

--sort=<key>

根据给定的关键字进行排序。前缀`-`按值的降序进行排序。您可以多次使用--sort = <key>选项，在这种情况下，最后一个键变为主键。支持的密钥与中的密钥相同`git for-each-ref`。排序顺序默认为基于完整的refname（包括`refs/...`前缀）排序。这将首先列出分离的HEAD（如果存在），然后列出当地分支和最终远程跟踪分支。

--points-at <object>

只列出给定对象的分支。

--format <format>

`%(fieldname)`从显示的分支ref 中插入的字符串以及它指向的对象。格式与git-for-each-ref [1]的格式相同。

## 例子

从已知标签开始开发

    $ 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）

2. 删除远程追踪分支“todo”，“html”和“man”。下一个`fetch`或`pull`将再次创建它们，除非您将它们配置为不再。参见git-fetch [1]。

3. 即使“主”分支（或当前选中的分支）没有提交来自测试分支的所有提交，也要删除“测试”分支。注意如果您正在创建要立即签出的分支，则它更易于使用其Git的checkout命令`-b`选项来创建一个分支，并检查它与单一command.The选项`--contains`，`--no-contains`，`--merged`和`--no-merged`服务四个相关但不同的目的：

4. `--contains <commit>` 用于查找所有需要特别注意的分支，因为这些分支包含指定的<commit>。

- `--no-contains <commit>` 是相反的，即不包含指定的<commit>的分支。

- `--merged` 用于查找可以安全删除的所有分支，因为这些分支完全由HEAD包含。

- `--no-merged` 用于查找合并到HEAD中的候选分支，因为这些分支未被HEAD完全包含。