Documentation / git-branch.txton commit Merge branch 'nd/diff-parseopt' (20aa7c5)
   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] [--show-current] [-v [--abbrev=<length> | --no-abbrev]]
  13        [--column[=<options>] | --no-column] [--sort=<key>]
  14        [(--merged | --no-merged) [<commit>]]
  15        [--contains [<commit]] [--no-contains [<commit>]]
  16        [--points-at <object>] [--format=<format>] [<pattern>...]
  17'git branch' [--track | --no-track] [-f] <branchname> [<start-point>]
  18'git branch' (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
  19'git branch' --unset-upstream [<branchname>]
  20'git branch' (-m | -M) [<oldbranch>] <newbranch>
  21'git branch' (-c | -C) [<oldbranch>] <newbranch>
  22'git branch' (-d | -D) [-r] <branchname>...
  23'git branch' --edit-description [<branchname>]
  24
  25DESCRIPTION
  26-----------
  27
  28If `--list` is given, or if there are no non-option arguments, existing
  29branches are listed; the current branch will be highlighted with an
  30asterisk.  Option `-r` causes the remote-tracking branches to be listed,
  31and option `-a` shows both local and remote branches. If a `<pattern>`
  32is given, it is used as a shell wildcard to restrict the output to
  33matching branches. If multiple patterns are given, a branch is shown if
  34it matches any of the patterns.  Note that when providing a
  35`<pattern>`, you must use `--list`; otherwise the command is interpreted
  36as branch creation.
  37
  38With `--contains`, shows only the branches that contain the named commit
  39(in other words, the branches whose tip commits are descendants of the
  40named commit), `--no-contains` inverts it. With `--merged`, only branches
  41merged into the named commit (i.e. the branches whose tip commits are
  42reachable from the named commit) will be listed.  With `--no-merged` only
  43branches not merged into the named commit will be listed.  If the <commit>
  44argument is missing it defaults to `HEAD` (i.e. the tip of the current
  45branch).
  46
  47The command's second form creates a new branch head named <branchname>
  48which points to the current `HEAD`, or <start-point> if given. As a
  49special case, for <start-point>, you may use `"A...B"` as a shortcut for
  50the merge base of `A` and `B` if there is exactly one merge base. You
  51can leave out at most one of `A` and `B`, in which case it defaults to
  52`HEAD`.
  53
  54Note that this will create the new branch, but it will not switch the
  55working tree to it; use "git checkout <newbranch>" to switch to the
  56new branch.
  57
  58When a local branch is started off a remote-tracking branch, Git sets up the
  59branch (specifically the `branch.<name>.remote` and `branch.<name>.merge`
  60configuration entries) so that 'git pull' will appropriately merge from
  61the remote-tracking branch. This behavior may be changed via the global
  62`branch.autoSetupMerge` configuration flag. That setting can be
  63overridden by using the `--track` and `--no-track` options, and
  64changed later using `git branch --set-upstream-to`.
  65
  66With a `-m` or `-M` option, <oldbranch> will be renamed to <newbranch>.
  67If <oldbranch> had a corresponding reflog, it is renamed to match
  68<newbranch>, and a reflog entry is created to remember the branch
  69renaming. If <newbranch> exists, -M must be used to force the rename
  70to happen.
  71
  72The `-c` and `-C` options have the exact same semantics as `-m` and
  73`-M`, except instead of the branch being renamed it along with its
  74config and reflog will be copied to a new name.
  75
  76With a `-d` or `-D` option, `<branchname>` will be deleted.  You may
  77specify more than one branch for deletion.  If the branch currently
  78has a reflog then the reflog will also be deleted.
  79
  80Use `-r` together with `-d` to delete remote-tracking branches. Note, that it
  81only makes sense to delete remote-tracking branches if they no longer exist
  82in the remote repository or if 'git fetch' was configured not to fetch
  83them again. See also the 'prune' subcommand of linkgit:git-remote[1] for a
  84way to clean up all obsolete remote-tracking branches.
  85
  86
  87OPTIONS
  88-------
  89-d::
  90--delete::
  91        Delete a branch. The branch must be fully merged in its
  92        upstream branch, or in `HEAD` if no upstream was set with
  93        `--track` or `--set-upstream-to`.
  94
  95-D::
  96        Shortcut for `--delete --force`.
  97
  98--create-reflog::
  99        Create the branch's reflog.  This activates recording of
 100        all changes made to the branch ref, enabling use of date
 101        based sha1 expressions such as "<branchname>@\{yesterday}".
 102        Note that in non-bare repositories, reflogs are usually
 103        enabled by default by the `core.logAllRefUpdates` config option.
 104        The negated form `--no-create-reflog` only overrides an earlier
 105        `--create-reflog`, but currently does not negate the setting of
 106        `core.logAllRefUpdates`.
 107
 108-f::
 109--force::
 110        Reset <branchname> to <startpoint>, even if <branchname> exists
 111        already. Without `-f`, 'git branch' refuses to change an existing branch.
 112        In combination with `-d` (or `--delete`), allow deleting the
 113        branch irrespective of its merged status. In combination with
 114        `-m` (or `--move`), allow renaming the branch even if the new
 115        branch name already exists, the same applies for `-c` (or `--copy`).
 116
 117-m::
 118--move::
 119        Move/rename a branch and the corresponding reflog.
 120
 121-M::
 122        Shortcut for `--move --force`.
 123
 124-c::
 125--copy::
 126        Copy a branch and the corresponding reflog.
 127
 128-C::
 129        Shortcut for `--copy --force`.
 130
 131--color[=<when>]::
 132        Color branches to highlight current, local, and
 133        remote-tracking branches.
 134        The value must be always (the default), never, or auto.
 135
 136--no-color::
 137        Turn off branch colors, even when the configuration file gives the
 138        default to color output.
 139        Same as `--color=never`.
 140
 141-i::
 142--ignore-case::
 143        Sorting and filtering branches are case insensitive.
 144
 145--column[=<options>]::
 146--no-column::
 147        Display branch listing in columns. See configuration variable
 148        column.branch for option syntax.`--column` and `--no-column`
 149        without options are equivalent to 'always' and 'never' respectively.
 150+
 151This option is only applicable in non-verbose mode.
 152
 153-r::
 154--remotes::
 155        List or delete (if used with -d) the remote-tracking branches.
 156
 157-a::
 158--all::
 159        List both remote-tracking branches and local branches.
 160
 161-l::
 162--list::
 163        List branches.  With optional `<pattern>...`, e.g. `git
 164        branch --list 'maint-*'`, list only the branches that match
 165        the pattern(s).
 166
 167--show-current::
 168        Print the name of the current branch. In detached HEAD state,
 169        nothing is printed.
 170
 171-v::
 172-vv::
 173--verbose::
 174        When in list mode,
 175        show sha1 and commit subject line for each head, along with
 176        relationship to upstream branch (if any). If given twice, print
 177        the name of the upstream branch, as well (see also `git remote
 178        show <remote>`).
 179
 180-q::
 181--quiet::
 182        Be more quiet when creating or deleting a branch, suppressing
 183        non-error messages.
 184
 185--abbrev=<length>::
 186        Alter the sha1's minimum display length in the output listing.
 187        The default value is 7 and can be overridden by the `core.abbrev`
 188        config option.
 189
 190--no-abbrev::
 191        Display the full sha1s in the output listing rather than abbreviating them.
 192
 193-t::
 194--track::
 195        When creating a new branch, set up `branch.<name>.remote` and
 196        `branch.<name>.merge` configuration entries to mark the
 197        start-point branch as "upstream" from the new branch. This
 198        configuration will tell git to show the relationship between the
 199        two branches in `git status` and `git branch -v`. Furthermore,
 200        it directs `git pull` without arguments to pull from the
 201        upstream when the new branch is checked out.
 202+
 203This behavior is the default when the start point is a remote-tracking branch.
 204Set the branch.autoSetupMerge configuration variable to `false` if you
 205want `git checkout` and `git branch` to always behave as if `--no-track`
 206were given. Set it to `always` if you want this behavior when the
 207start-point is either a local or remote-tracking branch.
 208
 209--no-track::
 210        Do not set up "upstream" configuration, even if the
 211        branch.autoSetupMerge configuration variable is true.
 212
 213--set-upstream::
 214        As this option had confusing syntax, it is no longer supported.
 215        Please use `--track` or `--set-upstream-to` instead.
 216
 217-u <upstream>::
 218--set-upstream-to=<upstream>::
 219        Set up <branchname>'s tracking information so <upstream> is
 220        considered <branchname>'s upstream branch. If no <branchname>
 221        is specified, then it defaults to the current branch.
 222
 223--unset-upstream::
 224        Remove the upstream information for <branchname>. If no branch
 225        is specified it defaults to the current branch.
 226
 227--edit-description::
 228        Open an editor and edit the text to explain what the branch is
 229        for, to be used by various other commands (e.g. `format-patch`,
 230        `request-pull`, and `merge` (if enabled)). Multi-line explanations
 231        may be used.
 232
 233--contains [<commit>]::
 234        Only list branches which contain the specified commit (HEAD
 235        if not specified). Implies `--list`.
 236
 237--no-contains [<commit>]::
 238        Only list branches which don't contain the specified commit
 239        (HEAD if not specified). Implies `--list`.
 240
 241--merged [<commit>]::
 242        Only list branches whose tips are reachable from the
 243        specified commit (HEAD if not specified). Implies `--list`,
 244        incompatible with `--no-merged`.
 245
 246--no-merged [<commit>]::
 247        Only list branches whose tips are not reachable from the
 248        specified commit (HEAD if not specified). Implies `--list`,
 249        incompatible with `--merged`.
 250
 251<branchname>::
 252        The name of the branch to create or delete.
 253        The new branch name must pass all checks defined by
 254        linkgit:git-check-ref-format[1].  Some of these checks
 255        may restrict the characters allowed in a branch name.
 256
 257<start-point>::
 258        The new branch head will point to this commit.  It may be
 259        given as a branch name, a commit-id, or a tag.  If this
 260        option is omitted, the current HEAD will be used instead.
 261
 262<oldbranch>::
 263        The name of an existing branch to rename.
 264
 265<newbranch>::
 266        The new name for an existing branch. The same restrictions as for
 267        <branchname> apply.
 268
 269--sort=<key>::
 270        Sort based on the key given. Prefix `-` to sort in descending
 271        order of the value. You may use the --sort=<key> option
 272        multiple times, in which case the last key becomes the primary
 273        key. The keys supported are the same as those in `git
 274        for-each-ref`. Sort order defaults to the value configured for the
 275        `branch.sort` variable if exists, or to sorting based on the
 276        full refname (including `refs/...` prefix). This lists
 277        detached HEAD (if present) first, then local branches and
 278        finally remote-tracking branches. See linkgit:git-config[1].
 279
 280
 281--points-at <object>::
 282        Only list branches of the given object.
 283
 284--format <format>::
 285        A string that interpolates `%(fieldname)` from a branch ref being shown
 286        and the object it points at.  The format is the same as
 287        that of linkgit:git-for-each-ref[1].
 288
 289CONFIGURATION
 290-------------
 291`pager.branch` is only respected when listing branches, i.e., when
 292`--list` is used or implied. The default is to use a pager.
 293See linkgit:git-config[1].
 294
 295EXAMPLES
 296--------
 297
 298Start development from a known tag::
 299+
 300------------
 301$ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
 302$ cd my2.6
 303$ git branch my2.6.14 v2.6.14   <1>
 304$ git checkout my2.6.14
 305------------
 306+
 307<1> This step and the next one could be combined into a single step with
 308    "checkout -b my2.6.14 v2.6.14".
 309
 310Delete an unneeded branch::
 311+
 312------------
 313$ git clone git://git.kernel.org/.../git.git my.git
 314$ cd my.git
 315$ git branch -d -r origin/todo origin/html origin/man   <1>
 316$ git branch -D test                                    <2>
 317------------
 318+
 319<1> Delete the remote-tracking branches "todo", "html" and "man". The next
 320    'fetch' or 'pull' will create them again unless you configure them not to.
 321    See linkgit:git-fetch[1].
 322<2> Delete the "test" branch even if the "master" branch (or whichever branch
 323    is currently checked out) does not have all commits from the test branch.
 324
 325
 326NOTES
 327-----
 328
 329If you are creating a branch that you want to checkout immediately, it is
 330easier to use the git checkout command with its `-b` option to create
 331a branch and check it out with a single command.
 332
 333The options `--contains`, `--no-contains`, `--merged` and `--no-merged`
 334serve four related but different purposes:
 335
 336- `--contains <commit>` is used to find all branches which will need
 337  special attention if <commit> were to be rebased or amended, since those
 338  branches contain the specified <commit>.
 339
 340- `--no-contains <commit>` is the inverse of that, i.e. branches that don't
 341  contain the specified <commit>.
 342
 343- `--merged` is used to find all branches which can be safely deleted,
 344  since those branches are fully contained by HEAD.
 345
 346- `--no-merged` is used to find branches which are candidates for merging
 347  into HEAD, since those branches are not fully contained by HEAD.
 348
 349SEE ALSO
 350--------
 351linkgit:git-check-ref-format[1],
 352linkgit:git-fetch[1],
 353linkgit:git-remote[1],
 354link:user-manual.html#what-is-a-branch[``Understanding history: What is
 355a branch?''] in the Git User's Manual.
 356
 357GIT
 358---
 359Part of the linkgit:git[1] suite