Documentation / git-branch.txton commit Merge branch 'po/maint-docs' into maint (756583f)
   1git-branch(1)
   2=============
   3
   4NAME
   5----
   6git-branch - List, create, or delete branches
   7
   8SYNOPSIS
   9--------
  10[verse]
  11'git branch' [--color[=<when>] | --no-color] [-r | -a]
  12        [--list] [-v [--abbrev=<length> | --no-abbrev]]
  13        [--column[=<options>] | --no-column]
  14        [(--merged | --no-merged | --contains) [<commit>]] [<pattern>...]
  15'git branch' [--set-upstream | --track | --no-track] [-l] [-f] <branchname> [<start-point>]
  16'git branch' (-m | -M) [<oldbranch>] <newbranch>
  17'git branch' (-d | -D) [-r] <branchname>...
  18'git branch' --edit-description [<branchname>]
  19
  20DESCRIPTION
  21-----------
  22
  23With no arguments, existing branches are listed and the current branch will
  24be highlighted with an asterisk.  Option `-r` causes the remote-tracking
  25branches to be listed, and option `-a` shows both. This list mode is also
  26activated by the `--list` option (see below).
  27<pattern> restricts the output to matching branches, the pattern is a shell
  28wildcard (i.e., matched using fnmatch(3)).
  29Multiple patterns may be given; if any of them matches, the branch is shown.
  30
  31With `--contains`, shows only the branches that contain the named commit
  32(in other words, the branches whose tip commits are descendants of the
  33named commit).  With `--merged`, only branches merged into the named
  34commit (i.e. the branches whose tip commits are reachable from the named
  35commit) will be listed.  With `--no-merged` only branches not merged into
  36the named commit will be listed.  If the <commit> argument is missing it
  37defaults to 'HEAD' (i.e. the tip of the current branch).
  38
  39The command's second form creates a new branch head named <branchname>
  40which points to the current 'HEAD', or <start-point> if given.
  41
  42Note that this will create the new branch, but it will not switch the
  43working tree to it; use "git checkout <newbranch>" to switch to the
  44new branch.
  45
  46When a local branch is started off a remote-tracking branch, git sets up the
  47branch so that 'git pull' will appropriately merge from
  48the remote-tracking branch. This behavior may be changed via the global
  49`branch.autosetupmerge` configuration flag. That setting can be
  50overridden by using the `--track` and `--no-track` options, and
  51changed later using `git branch --set-upstream`.
  52
  53With a `-m` or `-M` option, <oldbranch> will be renamed to <newbranch>.
  54If <oldbranch> had a corresponding reflog, it is renamed to match
  55<newbranch>, and a reflog entry is created to remember the branch
  56renaming. If <newbranch> exists, -M must be used to force the rename
  57to happen.
  58
  59With a `-d` or `-D` option, `<branchname>` will be deleted.  You may
  60specify more than one branch for deletion.  If the branch currently
  61has a reflog then the reflog will also be deleted.
  62
  63Use `-r` together with `-d` to delete remote-tracking branches. Note, that it
  64only makes sense to delete remote-tracking branches if they no longer exist
  65in the remote repository or if 'git fetch' was configured not to fetch
  66them again. See also the 'prune' subcommand of linkgit:git-remote[1] for a
  67way to clean up all obsolete remote-tracking branches.
  68
  69
  70OPTIONS
  71-------
  72-d::
  73--delete::
  74        Delete a branch. The branch must be fully merged in its
  75        upstream branch, or in `HEAD` if no upstream was set with
  76        `--track` or `--set-upstream`.
  77
  78-D::
  79        Delete a branch irrespective of its merged status.
  80
  81-l::
  82--create-reflog::
  83        Create the branch's reflog.  This activates recording of
  84        all changes made to the branch ref, enabling use of date
  85        based sha1 expressions such as "<branchname>@\{yesterday}".
  86        Note that in non-bare repositories, reflogs are usually
  87        enabled by default by the `core.logallrefupdates` config option.
  88
  89-f::
  90--force::
  91        Reset <branchname> to <startpoint> if <branchname> exists
  92        already. Without `-f` 'git branch' refuses to change an existing branch.
  93
  94-m::
  95--move::
  96        Move/rename a branch and the corresponding reflog.
  97
  98-M::
  99        Move/rename a branch even if the new branch name already exists.
 100
 101--color[=<when>]::
 102        Color branches to highlight current, local, and
 103        remote-tracking branches.
 104        The value must be always (the default), never, or auto.
 105
 106--no-color::
 107        Turn off branch colors, even when the configuration file gives the
 108        default to color output.
 109        Same as `--color=never`.
 110
 111--column[=<options>]::
 112--no-column::
 113        Display branch listing in columns. See configuration variable
 114        column.branch for option syntax.`--column` and `--no-column`
 115        without options are equivalent to 'always' and 'never' respectively.
 116+
 117This option is only applicable in non-verbose mode.
 118
 119-r::
 120--remotes::
 121        List or delete (if used with -d) the remote-tracking branches.
 122
 123-a::
 124--all::
 125        List both remote-tracking branches and local branches.
 126
 127--list::
 128        Activate the list mode. `git branch <pattern>` would try to create a branch,
 129        use `git branch --list <pattern>` to list matching branches.
 130
 131-v::
 132-vv::
 133--verbose::
 134        When in list mode,
 135        show sha1 and commit subject line for each head, along with
 136        relationship to upstream branch (if any). If given twice, print
 137        the name of the upstream branch, as well (see also `git remote
 138        show <remote>`).
 139
 140-q::
 141--quiet::
 142        Be more quiet when creating or deleting a branch, suppressing
 143        non-error messages.
 144
 145--abbrev=<length>::
 146        Alter the sha1's minimum display length in the output listing.
 147        The default value is 7 and can be overridden by the `core.abbrev`
 148        config option.
 149
 150--no-abbrev::
 151        Display the full sha1s in the output listing rather than abbreviating them.
 152
 153-t::
 154--track::
 155        When creating a new branch, set up configuration to mark the
 156        start-point branch as "upstream" from the new branch. This
 157        configuration will tell git to show the relationship between the
 158        two branches in `git status` and `git branch -v`. Furthermore,
 159        it directs `git pull` without arguments to pull from the
 160        upstream when the new branch is checked out.
 161+
 162This behavior is the default when the start point is a remote-tracking branch.
 163Set the branch.autosetupmerge configuration variable to `false` if you
 164want `git checkout` and `git branch` to always behave as if '--no-track'
 165were given. Set it to `always` if you want this behavior when the
 166start-point is either a local or remote-tracking branch.
 167
 168--no-track::
 169        Do not set up "upstream" configuration, even if the
 170        branch.autosetupmerge configuration variable is true.
 171
 172--set-upstream::
 173        If specified branch does not exist yet or if `--force` has been
 174        given, acts exactly like `--track`. Otherwise sets up configuration
 175        like `--track` would when creating the branch, except that where
 176        branch points to is not changed.
 177
 178--edit-description::
 179        Open an editor and edit the text to explain what the branch is
 180        for, to be used by various other commands (e.g. `request-pull`).
 181
 182--contains [<commit>]::
 183        Only list branches which contain the specified commit (HEAD
 184        if not specified).
 185
 186--merged [<commit>]::
 187        Only list branches whose tips are reachable from the
 188        specified commit (HEAD if not specified).
 189
 190--no-merged [<commit>]::
 191        Only list branches whose tips are not reachable from the
 192        specified commit (HEAD if not specified).
 193
 194<branchname>::
 195        The name of the branch to create or delete.
 196        The new branch name must pass all checks defined by
 197        linkgit:git-check-ref-format[1].  Some of these checks
 198        may restrict the characters allowed in a branch name.
 199
 200<start-point>::
 201        The new branch head will point to this commit.  It may be
 202        given as a branch name, a commit-id, or a tag.  If this
 203        option is omitted, the current HEAD will be used instead.
 204
 205<oldbranch>::
 206        The name of an existing branch to rename.
 207
 208<newbranch>::
 209        The new name for an existing branch. The same restrictions as for
 210        <branchname> apply.
 211
 212
 213Examples
 214--------
 215
 216Start development from a known tag::
 217+
 218------------
 219$ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
 220$ cd my2.6
 221$ git branch my2.6.14 v2.6.14   <1>
 222$ git checkout my2.6.14
 223------------
 224+
 225<1> This step and the next one could be combined into a single step with
 226"checkout -b my2.6.14 v2.6.14".
 227
 228Delete an unneeded branch::
 229+
 230------------
 231$ git clone git://git.kernel.org/.../git.git my.git
 232$ cd my.git
 233$ git branch -d -r origin/todo origin/html origin/man   <1>
 234$ git branch -D test                                    <2>
 235------------
 236+
 237<1> Delete the remote-tracking branches "todo", "html" and "man". The next
 238'fetch' or 'pull' will create them again unless you configure them not to.
 239See linkgit:git-fetch[1].
 240<2> Delete the "test" branch even if the "master" branch (or whichever branch
 241is currently checked out) does not have all commits from the test branch.
 242
 243
 244Notes
 245-----
 246
 247If you are creating a branch that you want to checkout immediately, it is
 248easier to use the git checkout command with its `-b` option to create
 249a branch and check it out with a single command.
 250
 251The options `--contains`, `--merged` and `--no-merged` serve three related
 252but different purposes:
 253
 254- `--contains <commit>` is used to find all branches which will need
 255  special attention if <commit> were to be rebased or amended, since those
 256  branches contain the specified <commit>.
 257
 258- `--merged` is used to find all branches which can be safely deleted,
 259  since those branches are fully contained by HEAD.
 260
 261- `--no-merged` is used to find branches which are candidates for merging
 262  into HEAD, since those branches are not fully contained by HEAD.
 263
 264SEE ALSO
 265--------
 266linkgit:git-check-ref-format[1],
 267linkgit:git-fetch[1],
 268linkgit:git-remote[1],
 269link:user-manual.html#what-is-a-branch[``Understanding history: What is
 270a branch?''] in the Git User's Manual.
 271
 272GIT
 273---
 274Part of the linkgit:git[1] suite