directory search
Guides gitattributes giteveryday gitglossary gitignore gitmodules gitrevisions gittutorial gitworkflows Administration git archive git bundle git clean git filter-branch git fsck git gc git instaweb git reflog Basic Snapshotting git add git commit git diff git mv git reset git rm git status Branching and Merging git branch git checkout git log git merge git mergetool git stash git tag Debugging git bisect git blame git grep Email git am git format-patch git request-pull git send-email External Systems git fast-import git svn Getting and Creating Projects git clone git init Git git annotate git archimport git bisect-lk2009 git check-attr git check-mailmap git check-ref-format git checkout-index git cherry git citool git column git credential git credential-cache git credential-store git cvsexportcommit git cvsimport git cvsserver git diff-files git diff-tree git difftool git fast-export git fetch-pack git fmt-merge-msg git get-tar-commit-id git gui git http-backend git http-fetch git http-push git imap-send git index-pack git interpret-trailers git ls-remote git ls-tree git mailinfo git mailsplit git merge-file git merge-index git merge-one-file git merge-tree git mktag git mktree git name-rev git notes git p4 git pack-objects git pack-redundant git pack-refs git parse-remote git patch-id git prune git prune-packed git quiltimport git receive-pack git remote-ext git remote-fd git remote-testgit git repack git replace git rerere git send-pack git sh-i18n git sh-setup git shell git show-branch git show-index git stripspace git unpack-file git unpack-objects git upload-archive git upload-pack git var git verify-commit git verify-tag git whatchanged git worktree Inspection and Comparison git describe git shortlog git show Miscellaneous api credentials api index gitcli gitcore tutorial gitcredentials gitcvs migration gitdiffcore githooks gitk gitnamespaces gitremote helpers gitrepository layout gitsubmodules gittutorial 2 gitweb gitweb.conf pack format User Manual Patching git apply git cherry-pick git rebase git revert Plumbing Commands git cat-file git check-ignore git commit-tree git count-objects git diff-index git for-each-ref git hash-object git ls-files git merge-base git read-tree git rev-list git rev-parse git show-ref git symbolic-ref git update-index git update-ref git verify-pack git write-tree Server Admin git daemon git update-server-info Setup and Config git git config git help Sharing and Updating Projects git fetch git pull git push git remote git submodule
characters

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>.remotebranch.<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已配置为不再获取它们,则仅删除远程跟踪分支是有意义的。另请参阅prunegit-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不带选项相当于alwaysnever分别。

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

-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.abbrevconfig选项覆盖。

--no-abbrev

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

-t   --track

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

当起始点是远程跟踪分支时,此行为是默认行为。false如果需要git checkoutgit 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-patchrequest-pullmerge(如果启用))。可以使用多行解释。

--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”。下一个fetchpull将再次创建它们,除非您将它们配置为不再。参见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完全包含。

Previous article: Next article: