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>,它将用作 shell 通配符以将输出限制为匹配的分支。如果给出了多个模式,则显示匹配任何模式的分支。
请注意,当提供 <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> 有相应的 reflog,它将被重命名以匹配 <new-branch>,并创建 reflog 条目以记住分支重命名。如果 <new-branch> 存在,必须使用 -M 强制重命名。
-c 和 -C 选项与 -m 和 -M 具有完全相同的语义,只是分支不会被重命名,而是会被复制到新名称,连同其配置和 reflog 一起。
使用 -d 或 -D 选项,<branch-name> 将被删除。你可以指定多个分支进行删除。如果分支当前有 reflog,则 reflog 也将被删除。
将 -r 与 -d 一起使用以删除远程跟踪分支。请注意,仅在远程存储库中不再存在或 git fetch 被配置为不再获取它们时,删除远程跟踪分支才有意义。另请参阅 git-remote(1) 的 prune 子命令以清理所有过时的远程跟踪分支。
选项
-d, --delete
删除分支。分支必须在其上游分支中完全合并,或者如果未使用 --track 或 --set-upstream-to 设置上游,则在 HEAD 中完全合并。
-D
--delete --force 的快捷方式。
--create-reflog
创建分支的 reflog。这激活对分支引用所做的所有更改的记录,允许使用基于日期的 sha1 表达式,如 <branch-name>@{yesterday}。请注意,在非裸存储库中,reflog 通常默认由 core.logAllRefUpdates 配置选项启用。
-f, --force
将 <branch-name> 重置为 <start-point>,即使 <branch-name> 已存在。没有 -f,git branch 拒绝更改现有分支。与 -d(或 --delete)结合使用时,无论其合并状态如何,甚至无论它是否指向有效提交,都允许删除分支。与 -m(或 --move)结合使用时,即使新分支名称已存在,也允许重命名分支,-c(或 --copy)同样适用。
-m, --move
移动/重命名分支,连同其配置和 reflog。
-M
--move --force 的快捷方式。
-c, --copy
复制分支,连同其配置和 reflog。
-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) 中的相同。
-r, --remotes
列出或删除(如果与 -d 一起使用)远程跟踪分支。与 --list 结合使用以匹配可选模式。
-a, --all
列出远程跟踪分支和本地分支。与 --list 结合使用以匹配可选模式。
-l, --list
列出分支。带可选 <pattern>...,例如 git branch --list 'maint-*',仅列出匹配模式的分支。
--show-current
打印当前分支的名称。在分离 HEAD 状态下,不打印任何内容。
-v, -vv, --verbose
在列表模式下,显示每个头的 sha1 和提交主题行,以及与上游分支的关系(如果有)。如果给出两次,还打印链接工作树的路径(如果有)和上游分支的名称。
-q, --quiet
在创建或删除分支时更安静,抑制非错误消息。
--abbrev=<n>
在显示提交对象名称的详细列表中,显示至少 <n> 位十六进制数字长的最短前缀以唯一引用对象。默认值为 7,可由 core.abbrev 配置选项覆盖。
--no-abbrev
在输出列表中显示完整的 sha1 而不是缩写它们。
-t, --track[=(direct|inherit)]
创建新分支时,设置 branch.<name>.remote 和 branch.<name>.merge 配置条目以为新分支设置"上游"跟踪配置。
--no-track
即使设置了 branch.autoSetupMerge 配置变量,也不设置"上游"配置。
--recurse-submodules
此选项是实验性的!如果启用了 submodule.propagateBranches,则使当前命令递归进入子模块。
--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) 的相同。
配置
pager.branch 仅在列出分支时被尊重,即当使用或隐含 --list 时。默认是使用分页器。参见 git-config(1)。
branch.autoSetupMerge
告诉 git branch、git switch 和 git checkout 设置新分支,以便 git-pull(1) 将适当地从起始点分支合并。
branch.sort
此变量控制 git-branch(1) 显示时分支的排序顺序。
branch.<name>.remote
在分支 <name> 上时,告诉 git fetch 和 git push 从哪个远程获取或推送到哪个远程。
branch.<name>.merge
与 branch.<name>.remote 一起定义给定分支的上游分支。
branch.<name>.rebase
为 true 时,在获取的分支之上变基分支 <name>,而不是在运行 git pull 时从默认远程合并默认分支。
branch.<name>.description
分支描述,可以用 git branch --edit-description 编辑。
示例
从已知标签开始开发:
$ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
$ cd my2.6
$ git branch my2.6.14 v2.6.14
$ git switch my2.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
$ git branch -D test从特定远程列出分支:
$ git branch -r -l '<remote>/<pattern>'
$ git for-each-ref 'refs/remotes/<remote>/<pattern>'备注
如果你想创建一个要立即切换到的分支,使用带 -c 选项的 git switch 命令用单个命令执行相同操作更容易。
选项 --contains、--no-contains、--merged 和 --no-merged 服务于四个相关但不同的目的:
--contains <commit>用于查找如果 <commit> 被变基或修改将需要特别注意的所有分支。--no-contains <commit>是其反面。--merged用于查找可以安全删除的所有分支。--no-merged用于查找合并到HEAD的候选分支。
另请参阅
git-check-ref-format(1)、git-fetch(1)、git-remote(1)
Git
git(1) 套件的一部分
