'\" t
.\" Title: git-branch
.\" Author: [FIXME: author] [see http://docbook.sf.net/el/author]
.\" Generator: DocBook XSL Stylesheets v1.78.1
.\" Date: 05/28/2018
.\" Manual: Git Manual
.\" Source: Git 2.1.4
.\" Language: English
.\"
.TH "GIT\-BRANCH" "1" "05/28/2018" "Git 2\&.1\&.4" "Git Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
git-branch \- List, create, or delete branches
.SH "SYNOPSIS"
.sp
.nf
\fIgit branch\fR [\-\-color[=] | \-\-no\-color] [\-r | \-a]
[\-\-list] [\-v [\-\-abbrev= | \-\-no\-abbrev]]
[\-\-column[=] | \-\-no\-column]
[(\-\-merged | \-\-no\-merged | \-\-contains) []] [\&...]
\fIgit branch\fR [\-\-set\-upstream | \-\-track | \-\-no\-track] [\-l] [\-f] []
\fIgit branch\fR (\-\-set\-upstream\-to= | \-u ) []
\fIgit branch\fR \-\-unset\-upstream []
\fIgit branch\fR (\-m | \-M) []
\fIgit branch\fR (\-d | \-D) [\-r] \&...
\fIgit branch\fR \-\-edit\-description []
.fi
.sp
.SH "DESCRIPTION"
.sp
If \-\-list is given, or if there are no non\-option arguments, existing branches are listed; the current branch will be highlighted with an asterisk\&. Option \-r causes the remote\-tracking branches to be listed, and option \-a shows both local and remote branches\&. If a is given, it is used as a shell wildcard to restrict the output to matching branches\&. If multiple patterns are given, a branch is shown if it matches any of the patterns\&. Note that when providing a , you must use \-\-list; otherwise the command is interpreted as branch creation\&.
.sp
With \-\-contains, shows only the branches that contain the named commit (in other words, the branches whose tip commits are descendants of the named commit)\&. With \-\-merged, only branches merged into the named commit (i\&.e\&. the branches whose tip commits are reachable from the named commit) will be listed\&. With \-\-no\-merged only branches not merged into the named commit will be listed\&. If the argument is missing it defaults to \fIHEAD\fR (i\&.e\&. the tip of the current branch)\&.
.sp
The command\(cqs second form creates a new branch head named which points to the current \fIHEAD\fR, or if given\&.
.sp
Note that this will create the new branch, but it will not switch the working tree to it; use "git checkout " to switch to the new branch\&.
.sp
When a local branch is started off a remote\-tracking branch, Git sets up the branch (specifically the branch\&.\&.remote and branch\&.\&.merge configuration entries) so that \fIgit pull\fR will appropriately merge from the remote\-tracking branch\&. This behavior may be changed via the global branch\&.autosetupmerge configuration flag\&. That setting can be overridden by using the \-\-track and \-\-no\-track options, and changed later using git branch \-\-set\-upstream\-to\&.
.sp
With a \-m or \-M option, will be renamed to \&. If had a corresponding reflog, it is renamed to match , and a reflog entry is created to remember the branch renaming\&. If exists, \-M must be used to force the rename to happen\&.
.sp
With a \-d or \-D option, will be deleted\&. You may specify more than one branch for deletion\&. If the branch currently has a reflog then the reflog will also be deleted\&.
.sp
Use \-r together with \-d to delete remote\-tracking branches\&. Note, that it only makes sense to delete remote\-tracking branches if they no longer exist in the remote repository or if \fIgit fetch\fR was configured not to fetch them again\&. See also the \fIprune\fR subcommand of \fBgit-remote\fR(1) for a way to clean up all obsolete remote\-tracking branches\&.
.SH "OPTIONS"
.PP
\-d, \-\-delete
.RS 4
Delete a branch\&. The branch must be fully merged in its upstream branch, or in
HEAD
if no upstream was set with
\-\-track
or
\-\-set\-upstream\&.
.RE
.PP
\-D
.RS 4
Delete a branch irrespective of its merged status\&.
.RE
.PP
\-l, \-\-create\-reflog
.RS 4
Create the branch\(cqs reflog\&. This activates recording of all changes made to the branch ref, enabling use of date based sha1 expressions such as "@{yesterday}"\&. Note that in non\-bare repositories, reflogs are usually enabled by default by the
core\&.logallrefupdates
config option\&.
.RE
.PP
\-f, \-\-force
.RS 4
Reset to if exists already\&. Without
\-f\fIgit branch\fR
refuses to change an existing branch\&.
.RE
.PP
\-m, \-\-move
.RS 4
Move/rename a branch and the corresponding reflog\&.
.RE
.PP
\-M
.RS 4
Move/rename a branch even if the new branch name already exists\&.
.RE
.PP
\-\-color[=]
.RS 4
Color branches to highlight current, local, and remote\-tracking branches\&. The value must be always (the default), never, or auto\&.
.RE
.PP
\-\-no\-color
.RS 4
Turn off branch colors, even when the configuration file gives the default to color output\&. Same as
\-\-color=never\&.
.RE
.PP
\-\-column[=], \-\-no\-column
.RS 4
Display branch listing in columns\&. See configuration variable column\&.branch for option syntax\&.\-\-column
and
\-\-no\-column
without options are equivalent to
\fIalways\fR
and
\fInever\fR
respectively\&.
.sp
This option is only applicable in non\-verbose mode\&.
.RE
.PP
\-r, \-\-remotes
.RS 4
List or delete (if used with \-d) the remote\-tracking branches\&.
.RE
.PP
\-a, \-\-all
.RS 4
List both remote\-tracking branches and local branches\&.
.RE
.PP
\-\-list
.RS 4
Activate the list mode\&.
git branch
would try to create a branch, use
git branch \-\-list
to list matching branches\&.
.RE
.PP
\-v, \-vv, \-\-verbose
.RS 4
When in list mode, show sha1 and commit subject line for each head, along with relationship to upstream branch (if any)\&. If given twice, print the name of the upstream branch, as well (see also
git remote show )\&.
.RE
.PP
\-q, \-\-quiet
.RS 4
Be more quiet when creating or deleting a branch, suppressing non\-error messages\&.
.RE
.PP
\-\-abbrev=
.RS 4
Alter the sha1\(cqs minimum display length in the output listing\&. The default value is 7 and can be overridden by the
core\&.abbrev
config option\&.
.RE
.PP
\-\-no\-abbrev
.RS 4
Display the full sha1s in the output listing rather than abbreviating them\&.
.RE
.PP
\-t, \-\-track
.RS 4
When creating a new branch, set up
branch\&.\&.remote
and
branch\&.\&.merge
configuration entries to mark the start\-point branch as "upstream" from the new branch\&. This configuration will tell git to show the relationship between the two branches in
git status
and
git branch \-v\&. Furthermore, it directs
git pull
without arguments to pull from the upstream when the new branch is checked out\&.
.sp
This behavior is the default when the start point is a remote\-tracking branch\&. Set the branch\&.autosetupmerge configuration variable to
false
if you want
git checkout
and
git branch
to always behave as if
\fI\-\-no\-track\fR
were given\&. Set it to
always
if you want this behavior when the start\-point is either a local or remote\-tracking branch\&.
.RE
.PP
\-\-no\-track
.RS 4
Do not set up "upstream" configuration, even if the branch\&.autosetupmerge configuration variable is true\&.
.RE
.PP
\-\-set\-upstream
.RS 4
If specified branch does not exist yet or if
\-\-force
has been given, acts exactly like
\-\-track\&. Otherwise sets up configuration like
\-\-track
would when creating the branch, except that where branch points to is not changed\&.
.RE
.PP
\-u , \-\-set\-upstream\-to=
.RS 4
Set up \*(Aqs tracking information so is considered \*(Aqs upstream branch\&. If no is specified, then it defaults to the current branch\&.
.RE
.PP
\-\-unset\-upstream
.RS 4
Remove the upstream information for \&. If no branch is specified it defaults to the current branch\&.
.RE
.PP
\-\-edit\-description
.RS 4
Open an editor and edit the text to explain what the branch is for, to be used by various other commands (e\&.g\&.
request\-pull)\&.
.RE
.PP
\-\-contains []
.RS 4
Only list branches which contain the specified commit (HEAD if not specified)\&. Implies
\-\-list\&.
.RE
.PP
\-\-merged []
.RS 4
Only list branches whose tips are reachable from the specified commit (HEAD if not specified)\&. Implies
\-\-list\&.
.RE
.PP
\-\-no\-merged []
.RS 4
Only list branches whose tips are not reachable from the specified commit (HEAD if not specified)\&. Implies
\-\-list\&.
.RE
.PP
.RS 4
The name of the branch to create or delete\&. The new branch name must pass all checks defined by
\fBgit-check-ref-format\fR(1)\&. Some of these checks may restrict the characters allowed in a branch name\&.
.RE
.PP
.RS 4
The new branch head will point to this commit\&. It may be given as a branch name, a commit\-id, or a tag\&. If this option is omitted, the current HEAD will be used instead\&.
.RE
.PP
.RS 4
The name of an existing branch to rename\&.
.RE
.PP
.RS 4
The new name for an existing branch\&. The same restrictions as for apply\&.
.RE
.SH "EXAMPLES"
.PP
Start development from a known tag
.RS 4
.sp
.if n \{\
.RS 4
.\}
.nf
$ git clone git://git\&.kernel\&.org/pub/scm/\&.\&.\&./linux\-2\&.6 my2\&.6
$ cd my2\&.6
$ git branch my2\&.6\&.14 v2\&.6\&.14 \fB(1)\fR
$ git checkout my2\&.6\&.14
.fi
.if n \{\
.RE
.\}
.sp
\fB1. \fRThis step and the next one could be combined into a single step with "checkout \-b my2\&.6\&.14 v2\&.6\&.14"\&.
.br
.RE
.PP
Delete an unneeded branch
.RS 4
.sp
.if n \{\
.RS 4
.\}
.nf
$ git clone git://git\&.kernel\&.org/\&.\&.\&./git\&.git my\&.git
$ cd my\&.git
$ git branch \-d \-r origin/todo origin/html origin/man \fB(1)\fR
$ git branch \-D test \fB(2)\fR
.fi
.if n \{\
.RE
.\}
.sp
\fB1. \fRDelete the remote\-tracking branches "todo", "html" and "man"\&. The next
\fIfetch\fR
or
\fIpull\fR
will create them again unless you configure them not to\&. See
\fBgit-fetch\fR(1)\&.
.br
\fB2. \fRDelete the "test" branch even if the "master" branch (or whichever branch is currently checked out) does not have all commits from the test branch\&.
.br
.RE
.SH "NOTES"
.sp
If you are creating a branch that you want to checkout immediately, it is easier to use the git checkout command with its \-b option to create a branch and check it out with a single command\&.
.sp
The options \-\-contains, \-\-merged and \-\-no\-merged serve three related but different purposes:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-contains
is used to find all branches which will need special attention if were to be rebased or amended, since those branches contain the specified \&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-merged
is used to find all branches which can be safely deleted, since those branches are fully contained by HEAD\&.
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
\-\-no\-merged
is used to find branches which are candidates for merging into HEAD, since those branches are not fully contained by HEAD\&.
.RE
.SH "SEE ALSO"
.sp
\fBgit-check-ref-format\fR(1), \fBgit-fetch\fR(1), \fBgit-remote\fR(1), \m[blue]\fB\(lqUnderstanding history: What is a branch?\(rq\fR\m[]\&\s-2\u[1]\d\s+2 in the Git User\(cqs Manual\&.
.SH "GIT"
.sp
Part of the \fBgit\fR(1) suite
.SH "NOTES"
.IP " 1." 4
\(lqUnderstanding history: What is a branch?\(rq
.RS 4
\%file:///usr/share/doc/git/html/user-manual.html#what-is-a-branch
.RE