| '\" t |
| .\" Title: git-branch |
| .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author] |
| .\" Generator: DocBook XSL Stylesheets v1.79.2 <http://docbook.sf.net/> |
| .\" Date: 2025-07-24 |
| .\" Manual: Git Manual |
| .\" Source: Git 2.50.1.461.ge4ef0485fd |
| .\" Language: English |
| .\" |
| .TH "GIT\-BRANCH" "1" "2025-07-24" "Git 2\&.50\&.1\&.461\&.ge4ef04" "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 |
| \fBgit\fR \fBbranch\fR [\fB\-\-color\fR[\fB=\fR\fI<when>\fR] | \fB\-\-no\-color\fR] [\fB\-\-show\-current\fR] |
| [\fB\-v\fR [\fB\-\-abbrev=\fR\fI<n>\fR | \fB\-\-no\-abbrev\fR]] |
| [\fB\-\-column\fR[\fB=\fR\fI<options>\fR] | \fB\-\-no\-column\fR] [\fB\-\-sort=\fR\fI<key>\fR] |
| [\fB\-\-merged\fR [\fI<commit>\fR]] [\fB\-\-no\-merged\fR [\fI<commit>\fR]] |
| [\fB\-\-contains\fR [\fI<commit>\fR]] [\fB\-\-no\-contains\fR [\fI<commit>\fR]] |
| [\fB\-\-points\-at\fR \fI<object>\fR] [\fB\-\-format=\fR\fI<format>\fR] |
| [(\fB\-r\fR|\fB\-\-remotes\fR) | (\fB\-a\fR|\fB\-\-all\fR)] |
| [\fB\-\-list\fR] [\fI<pattern>\fR\&...\:] |
| \fBgit\fR \fBbranch\fR [\fB\-\-track\fR[\fB=\fR(\fBdirect\fR|\fBinherit\fR)] | \fB\-\-no\-track\fR] [\fB\-f\fR] |
| [\fB\-\-recurse\-submodules\fR] \fI<branch\-name>\fR [\fI<start\-point>\fR] |
| \fBgit\fR \fBbranch\fR (\fB\-\-set\-upstream\-to=\fR\fI<upstream>\fR|\fB\-u\fR \fI<upstream>\fR) [\fI<branch\-name>\fR] |
| \fBgit\fR \fBbranch\fR \fB\-\-unset\-upstream\fR [\fI<branch\-name>\fR] |
| \fBgit\fR \fBbranch\fR (\fB\-m\fR|\fB\-M\fR) [\fI<old\-branch>\fR] \fI<new\-branch>\fR |
| \fBgit\fR \fBbranch\fR (\fB\-c\fR|\fB\-C\fR) [\fI<old\-branch>\fR] \fI<new\-branch>\fR |
| \fBgit\fR \fBbranch\fR (\fB\-d\fR|\fB\-D\fR) [\fB\-r\fR] \fI<branch\-name>\fR\&...\: |
| \fBgit\fR \fBbranch\fR \fB\-\-edit\-description\fR [\fI<branch\-name>\fR] |
| .fi |
| .SH "DESCRIPTION" |
| .sp |
| If \fB\-\-list\fR is given, or if there are no non\-option arguments, existing branches are listed; the current branch will be highlighted in green and marked with an asterisk\&. Any branches checked out in linked worktrees will be highlighted in cyan and marked with a plus sign\&. Option \fB\-r\fR causes the remote\-tracking branches to be listed, and option \fB\-a\fR shows both local and remote branches\&. |
| .sp |
| If a \fI<pattern>\fR 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\&. |
| .sp |
| Note that when providing a \fI<pattern>\fR, you must use \fB\-\-list\fR; otherwise the command may be interpreted as branch creation\&. |
| .sp |
| With \fB\-\-contains\fR, shows only the branches that contain the named commit (in other words, the branches whose tip commits are descendants of the named commit), \fB\-\-no\-contains\fR inverts it\&. With \fB\-\-merged\fR, only branches merged into the named commit (i\&.e\&. the branches whose tip commits are reachable from the named commit) will be listed\&. With \fB\-\-no\-merged\fR only branches not merged into the named commit will be listed\&. If the \fI<commit>\fR argument is missing it defaults to \fBHEAD\fR (i\&.e\&. the tip of the current branch)\&. |
| .sp |
| The command\(cqs second form creates a new branch head named \fI<branch\-name>\fR which points to the current \fBHEAD\fR, or \fI<start\-point>\fR if given\&. As a special case, for \fI<start\-point>\fR, you may use \fI<rev\-A>\fR\fB\&.\&.\&.\fR\fI<rev\-B>\fR as a shortcut for the merge base of \fI<rev\-A>\fR and \fI<rev\-B>\fR if there is exactly one merge base\&. You can leave out at most one of \fI<rev\-A>\fR and \fI<rev\-B>\fR, in which case it defaults to \fBHEAD\fR\&. |
| .sp |
| Note that this will create the new branch, but it will not switch the working tree to it; use \fBgit\fR \fBswitch\fR \fI<new\-branch>\fR 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 \fBbranch\&.\fR\fI<name>\fR\fB\&.remote\fR and \fBbranch\&.\fR\fI<name>\fR\fB\&.merge\fR configuration entries) so that \fBgit\fR \fBpull\fR will appropriately merge from the remote\-tracking branch\&. This behavior may be changed via the global \fBbranch\&.autoSetupMerge\fR configuration flag\&. That setting can be overridden by using the \fB\-\-track\fR and \fB\-\-no\-track\fR options, and changed later using \fBgit\fR \fBbranch\fR \fB\-\-set\-upstream\-to\fR\&. |
| .sp |
| With a \fB\-m\fR or \fB\-M\fR option, \fI<old\-branch>\fR will be renamed to \fI<new\-branch>\fR\&. If \fI<old\-branch>\fR had a corresponding reflog, it is renamed to match \fI<new\-branch>\fR, and a reflog entry is created to remember the branch renaming\&. If \fI<new\-branch>\fR exists, \fB\-M\fR must be used to force the rename to happen\&. |
| .sp |
| The \fB\-c\fR and \fB\-C\fR options have the exact same semantics as \fB\-m\fR and \fB\-M\fR, except instead of the branch being renamed, it will be copied to a new name, along with its config and reflog\&. |
| .sp |
| With a \fB\-d\fR or \fB\-D\fR option, \fI<branch\-name>\fR 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 \fB\-r\fR together with \fB\-d\fR 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 \fBgit\fR \fBfetch\fR was configured not to fetch them again\&. See also the \fBprune\fR subcommand of \fBgit-remote\fR(1) for a way to clean up all obsolete remote\-tracking branches\&. |
| .SH "OPTIONS" |
| .PP |
| \fB\-d\fR, \fB\-\-delete\fR |
| .RS 4 |
| Delete a branch\&. The branch must be fully merged in its upstream branch, or in |
| \fBHEAD\fR |
| if no upstream was set with |
| \fB\-\-track\fR |
| or |
| \fB\-\-set\-upstream\-to\fR\&. |
| .RE |
| .PP |
| \fB\-D\fR |
| .RS 4 |
| Shortcut for |
| \fB\-\-delete\fR |
| \fB\-\-force\fR\&. |
| .RE |
| .PP |
| \fB\-\-create\-reflog\fR |
| .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 |
| \fI<branch\-name>\fR\fB@\fR{yesterday}\&. Note that in non\-bare repositories, reflogs are usually enabled by default by the |
| \fBcore\&.logAllRefUpdates\fR |
| config option\&. The negated form |
| \fB\-\-no\-create\-reflog\fR |
| only overrides an earlier |
| \fB\-\-create\-reflog\fR, but currently does not negate the setting of |
| \fBcore\&.logAllRefUpdates\fR\&. |
| .RE |
| .PP |
| \fB\-f\fR, \fB\-\-force\fR |
| .RS 4 |
| Reset |
| \fI<branch\-name>\fR |
| to |
| \fI<start\-point>\fR, even if |
| \fI<branch\-name>\fR |
| exists already\&. Without |
| \fB\-f\fR, |
| \fBgit\fR |
| \fBbranch\fR |
| refuses to change an existing branch\&. In combination with |
| \fB\-d\fR |
| (or |
| \fB\-\-delete\fR), allow deleting the branch irrespective of its merged status, or whether it even points to a valid commit\&. In combination with |
| \fB\-m\fR |
| (or |
| \fB\-\-move\fR), allow renaming the branch even if the new branch name already exists, the same applies for |
| \fB\-c\fR |
| (or |
| \fB\-\-copy\fR)\&. |
| .sp |
| Note that |
| \fBgit\fR |
| \fBbranch\fR |
| \fB\-f\fR |
| \fI<branch\-name>\fR |
| [\fI<start\-point>\fR], even with |
| \fB\-f\fR, refuses to change an existing branch |
| \fI<branch\-name>\fR |
| that is checked out in another worktree linked to the same repository\&. |
| .RE |
| .PP |
| \fB\-m\fR, \fB\-\-move\fR |
| .RS 4 |
| Move/rename a branch, together with its config and reflog\&. |
| .RE |
| .PP |
| \fB\-M\fR |
| .RS 4 |
| Shortcut for |
| \fB\-\-move\fR |
| \fB\-\-force\fR\&. |
| .RE |
| .PP |
| \fB\-c\fR, \fB\-\-copy\fR |
| .RS 4 |
| Copy a branch, together with its config and reflog\&. |
| .RE |
| .PP |
| \fB\-C\fR |
| .RS 4 |
| Shortcut for |
| \fB\-\-copy\fR |
| \fB\-\-force\fR\&. |
| .RE |
| .PP |
| \fB\-\-color\fR[\fB=\fR\fI<when>\fR] |
| .RS 4 |
| Color branches to highlight current, local, and remote\-tracking branches\&. The value must be |
| \fBalways\fR |
| (the default), |
| \fBnever\fR, or |
| \fBauto\fR\&. |
| .RE |
| .PP |
| \fB\-\-no\-color\fR |
| .RS 4 |
| Turn off branch colors, even when the configuration file gives the default to color output\&. Same as |
| \fB\-\-color=never\fR\&. |
| .RE |
| .PP |
| \fB\-i\fR, \fB\-\-ignore\-case\fR |
| .RS 4 |
| Sorting and filtering branches are case insensitive\&. |
| .RE |
| .PP |
| \fB\-\-omit\-empty\fR |
| .RS 4 |
| Do not print a newline after formatted refs where the format expands to the empty string\&. |
| .RE |
| .PP |
| \fB\-\-column\fR[\fB=\fR\fI<options>\fR], \fB\-\-no\-column\fR |
| .RS 4 |
| Display branch listing in columns\&. See configuration variable |
| \fBcolumn\&.branch\fR |
| for option syntax\&. |
| \fB\-\-column\fR |
| and |
| \fB\-\-no\-column\fR |
| without options are equivalent to |
| \fBalways\fR |
| and |
| \fBnever\fR |
| respectively\&. |
| .sp |
| This option is only applicable in non\-verbose mode\&. |
| .RE |
| .PP |
| \fB\-\-sort=\fR\fI<key>\fR |
| .RS 4 |
| Sort based on |
| \fI<key>\fR\&. Prefix |
| \fB\-\fR |
| to sort in descending order of the value\&. You may use the |
| \fB\-\-sort=\fR\fI<key>\fR |
| option multiple times, in which case the last key becomes the primary key\&. The keys supported are the same as those in |
| \fBgit-for-each-ref\fR(1)\&. Sort order defaults to the value configured for the |
| \fBbranch\&.sort\fR |
| variable if it exists, or to sorting based on the full refname (including |
| \fBrefs/\&.\&.\fR\&. prefix)\&. This lists detached |
| \fBHEAD\fR |
| (if present) first, then local branches and finally remote\-tracking branches\&. See |
| \fBgit-config\fR(1)\&. |
| .RE |
| .PP |
| \fB\-r\fR, \fB\-\-remotes\fR |
| .RS 4 |
| List or delete (if used with |
| \fB\-d\fR) the remote\-tracking branches\&. Combine with |
| \fB\-\-list\fR |
| to match the optional pattern(s)\&. |
| .RE |
| .PP |
| \fB\-a\fR, \fB\-\-all\fR |
| .RS 4 |
| List both remote\-tracking branches and local branches\&. Combine with |
| \fB\-\-list\fR |
| to match optional pattern(s)\&. |
| .RE |
| .PP |
| \fB\-l\fR, \fB\-\-list\fR |
| .RS 4 |
| List branches\&. With optional |
| \fI<pattern>\fR\&.\&.\&., e\&.g\&. |
| \fBgit\fR |
| \fBbranch\fR |
| \fB\-\-list\fR |
| \*(Aqmaint\-*\*(Aq, list only the branches that match the pattern(s)\&. |
| .RE |
| .PP |
| \fB\-\-show\-current\fR |
| .RS 4 |
| Print the name of the current branch\&. In detached |
| \fBHEAD\fR |
| state, nothing is printed\&. |
| .RE |
| .PP |
| \fB\-v\fR, \fB\-vv\fR, \fB\-\-verbose\fR |
| .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 path of the linked worktree (if any) and the name of the upstream branch, as well (see also |
| \fBgit\fR |
| \fBremote\fR |
| \fBshow\fR |
| \fI<remote>\fR)\&. Note that the current worktree\(cqs |
| \fBHEAD\fR |
| will not have its path printed (it will always be your current directory)\&. |
| .RE |
| .PP |
| \fB\-q\fR, \fB\-\-quiet\fR |
| .RS 4 |
| Be more quiet when creating or deleting a branch, suppressing non\-error messages\&. |
| .RE |
| .PP |
| \fB\-\-abbrev=\fR\fI<n>\fR |
| .RS 4 |
| In the verbose listing that show the commit object name, show the shortest prefix that is at least |
| \fI<n>\fR |
| hexdigits long that uniquely refers the object\&. The default value is 7 and can be overridden by the |
| \fBcore\&.abbrev\fR |
| config option\&. |
| .RE |
| .PP |
| \fB\-\-no\-abbrev\fR |
| .RS 4 |
| Display the full sha1s in the output listing rather than abbreviating them\&. |
| .RE |
| .PP |
| \fB\-t\fR, \fB\-\-track\fR[\fB=\fR(\fBdirect\fR|\fBinherit\fR)] |
| .RS 4 |
| When creating a new branch, set up |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.remote\fR |
| and |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.merge\fR |
| configuration entries to set "upstream" tracking configuration for the new branch\&. This configuration will tell git to show the relationship between the two branches in |
| \fBgit\fR |
| \fBstatus\fR |
| and |
| \fBgit\fR |
| \fBbranch\fR |
| \fB\-v\fR\&. Furthermore, it directs |
| \fBgit\fR |
| \fBpull\fR |
| without arguments to pull from the upstream when the new branch is checked out\&. |
| .sp |
| The exact upstream branch is chosen depending on the optional argument: |
| \fB\-t\fR, |
| \fB\-\-track\fR, or |
| \fB\-\-track=direct\fR |
| means to use the start\-point branch itself as the upstream; |
| \fB\-\-track=inherit\fR |
| means to copy the upstream configuration of the start\-point branch\&. |
| .sp |
| The |
| \fBbranch\&.autoSetupMerge\fR |
| configuration variable specifies how |
| \fBgit\fR |
| \fBswitch\fR, |
| \fBgit\fR |
| \fBcheckout\fR |
| and |
| \fBgit\fR |
| \fBbranch\fR |
| should behave when neither |
| \fB\-\-track\fR |
| nor |
| \fB\-\-no\-track\fR |
| are specified: |
| .sp |
| The default option, |
| \fBtrue\fR, behaves as though |
| \fB\-\-track=direct\fR |
| were given whenever the start\-point is a remote\-tracking branch\&. |
| \fBfalse\fR |
| behaves as if |
| \fB\-\-no\-track\fR |
| were given\&. |
| \fBalways\fR |
| behaves as though |
| \fB\-\-track=direct\fR |
| were given\&. |
| \fBinherit\fR |
| behaves as though |
| \fB\-\-track=inherit\fR |
| were given\&. |
| \fBsimple\fR |
| behaves as though |
| \fB\-\-track=direct\fR |
| were given only when the |
| \fI<start\-point>\fR |
| is a remote\-tracking branch and the new branch has the same name as the remote branch\&. |
| .sp |
| See |
| \fBgit-pull\fR(1) |
| and |
| \fBgit-config\fR(1) |
| for additional discussion on how the |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.remote\fR |
| and |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.merge\fR |
| options are used\&. |
| .RE |
| .PP |
| \fB\-\-no\-track\fR |
| .RS 4 |
| Do not set up "upstream" configuration, even if the |
| \fBbranch\&.autoSetupMerge\fR |
| configuration variable is set\&. |
| .RE |
| .PP |
| \fB\-\-recurse\-submodules\fR |
| .RS 4 |
| THIS OPTION IS EXPERIMENTAL! Cause the current command to recurse into submodules if |
| \fBsubmodule\&.propagateBranches\fR |
| is enabled\&. See |
| \fBsubmodule\&.propagateBranches\fR |
| in |
| \fBgit-config\fR(1)\&. Currently, only branch creation is supported\&. |
| .sp |
| When used in branch creation, a new branch |
| \fI<branch\-name>\fR |
| will be created in the superproject and all of the submodules in the superproject\(cqs |
| \fI<start\-point>\fR\&. In submodules, the branch will point to the submodule commit in the superproject\(cqs |
| \fI<start\-point>\fR |
| but the branch\(cqs tracking information will be set up based on the submodule\(cqs branches and remotes e\&.g\&. |
| \fBgit\fR |
| \fBbranch\fR |
| \fB\-\-recurse\-submodules\fR |
| \fBtopic\fR |
| \fBorigin/main\fR |
| will create the submodule branch "topic" that points to the submodule commit in the superproject\(cqs "origin/main", but tracks the submodule\(cqs "origin/main"\&. |
| .RE |
| .PP |
| \fB\-\-set\-upstream\fR |
| .RS 4 |
| As this option had confusing syntax, it is no longer supported\&. Please use |
| \fB\-\-track\fR |
| or |
| \fB\-\-set\-upstream\-to\fR |
| instead\&. |
| .RE |
| .PP |
| \fB\-u\fR \fI<upstream>\fR, \fB\-\-set\-upstream\-to=\fR\fI<upstream>\fR |
| .RS 4 |
| Set up |
| \fI<branch\-name>\fR\*(Aqs tracking information so |
| \fI<upstream>\fR |
| is considered |
| \fI<branch\-name>\fR\*(Aqs upstream branch\&. If no |
| \fI<branch\-name>\fR |
| is specified, then it defaults to the current branch\&. |
| .RE |
| .PP |
| \fB\-\-unset\-upstream\fR |
| .RS 4 |
| Remove the upstream information for |
| \fI<branch\-name>\fR\&. If no branch is specified it defaults to the current branch\&. |
| .RE |
| .PP |
| \fB\-\-edit\-description\fR |
| .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\&. |
| \fBformat\-patch\fR, |
| \fBrequest\-pull\fR, and |
| \fBmerge\fR |
| (if enabled))\&. Multi\-line explanations may be used\&. |
| .RE |
| .PP |
| \fB\-\-contains\fR [\fI<commit>\fR] |
| .RS 4 |
| Only list branches which contain |
| \fI<commit>\fR |
| (\fBHEAD\fR |
| if not specified)\&. Implies |
| \fB\-\-list\fR\&. |
| .RE |
| .PP |
| \fB\-\-no\-contains\fR [\fI<commit>\fR] |
| .RS 4 |
| Only list branches which don\(cqt contain |
| \fI<commit>\fR |
| (\fBHEAD\fR |
| if not specified)\&. Implies |
| \fB\-\-list\fR\&. |
| .RE |
| .PP |
| \fB\-\-merged\fR [\fI<commit>\fR] |
| .RS 4 |
| Only list branches whose tips are reachable from |
| \fI<commit>\fR |
| (\fBHEAD\fR |
| if not specified)\&. Implies |
| \fB\-\-list\fR\&. |
| .RE |
| .PP |
| \fB\-\-no\-merged\fR [\fI<commit>\fR] |
| .RS 4 |
| Only list branches whose tips are not reachable from |
| \fI<commit>\fR |
| (\fBHEAD\fR |
| if not specified)\&. Implies |
| \fB\-\-list\fR\&. |
| .RE |
| .PP |
| \fB\-\-points\-at\fR \fI<object>\fR |
| .RS 4 |
| Only list branches of |
| \fI<object>\fR\&. |
| .RE |
| .PP |
| \fB\-\-format\fR \fI<format>\fR |
| .RS 4 |
| A string that interpolates |
| \fB%\fR(\fBfieldname\fR) from a branch ref being shown and the object it points at\&. |
| \fI<format>\fR |
| is the same as that of |
| \fBgit-for-each-ref\fR(1)\&. |
| .RE |
| .PP |
| \fI<branch\-name>\fR |
| .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 |
| \fI<start\-point>\fR |
| .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 |
| \fBHEAD\fR |
| will be used instead\&. |
| .RE |
| .PP |
| \fI<old\-branch>\fR |
| .RS 4 |
| The name of an existing branch\&. If this option is omitted, the name of the current branch will be used instead\&. |
| .RE |
| .PP |
| \fI<new\-branch>\fR |
| .RS 4 |
| The new name for an existing branch\&. The same restrictions as for |
| \fI<branch\-name>\fR |
| apply\&. |
| .RE |
| .SH "CONFIGURATION" |
| .sp |
| \fBpager\&.branch\fR is only respected when listing branches, i\&.e\&., when \fB\-\-list\fR is used or implied\&. The default is to use a pager\&. See \fBgit-config\fR(1)\&. |
| .sp |
| Everything above this line in this section isn\(cqt included from the \fBgit-config\fR(1) documentation\&. The content that follows is the same as what\(cqs found there: |
| .PP |
| \fBbranch\&.autoSetupMerge\fR |
| .RS 4 |
| Tells |
| \fBgit\fR |
| \fBbranch\fR, |
| \fBgit\fR |
| \fBswitch\fR |
| and |
| \fBgit\fR |
| \fBcheckout\fR |
| to set up new branches so that |
| \fBgit-pull\fR(1) |
| will appropriately merge from the starting point branch\&. Note that even if this option is not set, this behavior can be chosen per\-branch using the |
| \fB\-\-track\fR |
| and |
| \fB\-\-no\-track\fR |
| options\&. This option defaults to |
| \fBtrue\fR\&. The valid settings are: |
| .PP |
| \fBfalse\fR |
| .RS 4 |
| no automatic setup is done |
| .RE |
| .PP |
| \fBtrue\fR |
| .RS 4 |
| automatic setup is done when the starting point is a remote\-tracking branch |
| .RE |
| .PP |
| \fBalways\fR |
| .RS 4 |
| automatic setup is done when the starting point is either a local branch or remote\-tracking branch |
| .RE |
| .PP |
| \fBinherit\fR |
| .RS 4 |
| if the starting point has a tracking configuration, it is copied to the new branch |
| .RE |
| .PP |
| \fBsimple\fR |
| .RS 4 |
| automatic setup is done only when the starting point is a remote\-tracking branch and the new branch has the same name as the remote branch\&. |
| .RE |
| .RE |
| .PP |
| \fBbranch\&.autoSetupRebase\fR |
| .RS 4 |
| When a new branch is created with |
| \fBgit\fR |
| \fBbranch\fR, |
| \fBgit\fR |
| \fBswitch\fR |
| or |
| \fBgit\fR |
| \fBcheckout\fR |
| that tracks another branch, this variable tells Git to set up pull to rebase instead of merge (see |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.rebase\fR)\&. The valid settings are: |
| .PP |
| \fBnever\fR |
| .RS 4 |
| rebase is never automatically set to true\&. |
| .RE |
| .PP |
| \fBlocal\fR |
| .RS 4 |
| rebase is set to true for tracked branches of other local branches\&. |
| .RE |
| .PP |
| \fBremote\fR |
| .RS 4 |
| rebase is set to true for tracked branches of remote\-tracking branches\&. |
| .RE |
| .PP |
| \fBalways\fR |
| .RS 4 |
| rebase will be set to true for all tracking branches\&. |
| .RE |
| .sp |
| See |
| \fBbranch\&.autoSetupMerge\fR |
| for details on how to set up a branch to track another branch\&. This option defaults to |
| \fBnever\fR\&. |
| .RE |
| .PP |
| \fBbranch\&.sort\fR |
| .RS 4 |
| This variable controls the sort ordering of branches when displayed by |
| \fBgit-branch\fR(1)\&. Without the |
| \fB\-\-sort=\fR\fI<value>\fR |
| option provided, the value of this variable will be used as the default\&. See |
| \fBgit-for-each-ref\fR(1) |
| field names for valid values\&. |
| .RE |
| .PP |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.remote\fR |
| .RS 4 |
| When on branch |
| \fI<name>\fR, it tells |
| \fBgit\fR |
| \fBfetch\fR |
| and |
| \fBgit\fR |
| \fBpush\fR |
| which remote to fetch from or push to\&. The remote to push to may be overridden with |
| \fBremote\&.pushDefault\fR |
| (for all branches)\&. The remote to push to, for the current branch, may be further overridden by |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.pushRemote\fR\&. If no remote is configured, or if you are not on any branch and there is more than one remote defined in the repository, it defaults to |
| \fBorigin\fR |
| for fetching and |
| \fBremote\&.pushDefault\fR |
| for pushing\&. Additionally, \&. (a period) is the current local repository (a dot\-repository), see |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.merge\fR\*(Aqs final note below\&. |
| .RE |
| .PP |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.pushRemote\fR |
| .RS 4 |
| When on branch |
| \fI<name>\fR, it overrides |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.remote\fR |
| for pushing\&. It also overrides |
| \fBremote\&.pushDefault\fR |
| for pushing from branch |
| \fI<name>\fR\&. When you pull from one place (e\&.g\&. your upstream) and push to another place (e\&.g\&. your own publishing repository), you would want to set |
| \fBremote\&.pushDefault\fR |
| to specify the remote to push to for all branches, and use this option to override it for a specific branch\&. |
| .RE |
| .PP |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.merge\fR |
| .RS 4 |
| Defines, together with |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.remote\fR, the upstream branch for the given branch\&. It tells |
| \fBgit\fR |
| \fBfetch\fR/\fBgit\fR |
| \fBpull\fR/\fBgit\fR |
| \fBrebase\fR |
| which branch to merge and can also affect |
| \fBgit\fR |
| \fBpush\fR |
| (see |
| \fBpush\&.default\fR)\&. When in branch |
| \fI<name>\fR, it tells |
| \fBgit\fR |
| \fBfetch\fR |
| the default refspec to be marked for merging in |
| \fBFETCH_HEAD\fR\&. The value is handled like the remote part of a refspec, and must match a ref which is fetched from the remote given by |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.remote\fR\&. The merge information is used by |
| \fBgit\fR |
| \fBpull\fR |
| (which first calls |
| \fBgit\fR |
| \fBfetch\fR) to lookup the default branch for merging\&. Without this option, |
| \fBgit\fR |
| \fBpull\fR |
| defaults to merge the first refspec fetched\&. Specify multiple values to get an octopus merge\&. If you wish to setup |
| \fBgit\fR |
| \fBpull\fR |
| so that it merges into |
| \fI<name>\fR |
| from another branch in the local repository, you can point |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.merge\fR |
| to the desired branch, and use the relative path setting \&. (a period) for |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.remote\fR\&. |
| .RE |
| .PP |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.mergeOptions\fR |
| .RS 4 |
| Sets default options for merging into branch |
| \fI<name>\fR\&. The syntax and supported options are the same as those of |
| \fBgit-merge\fR(1), but option values containing whitespace characters are currently not supported\&. |
| .RE |
| .PP |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.rebase\fR |
| .RS 4 |
| When true, rebase the branch |
| \fI<name>\fR |
| on top of the fetched branch, instead of merging the default branch from the default remote when |
| \fBgit\fR |
| \fBpull\fR |
| is run\&. See |
| \fBpull\&.rebase\fR |
| for doing this in a non branch\-specific manner\&. |
| .sp |
| When |
| \fBmerges\fR |
| (or just |
| \fBm\fR), pass the |
| \fB\-\-rebase\-merges\fR |
| option to |
| \fBgit\fR |
| \fBrebase\fR |
| so that the local merge commits are included in the rebase (see |
| \fBgit-rebase\fR(1) |
| for details)\&. |
| .sp |
| When the value is |
| \fBinteractive\fR |
| (or just |
| \fBi\fR), the rebase is run in interactive mode\&. |
| .sp |
| \fBNOTE\fR: this is a possibly dangerous operation; do |
| \fBnot\fR |
| use it unless you understand the implications (see |
| \fBgit-rebase\fR(1) |
| for details)\&. |
| .RE |
| .PP |
| \fBbranch\&.\fR\fI<name>\fR\fB\&.description\fR |
| .RS 4 |
| Branch description, can be edited with |
| \fBgit\fR |
| \fBbranch\fR |
| \fB\-\-edit\-description\fR\&. Branch description is automatically added to the |
| \fBformat\-patch\fR |
| cover letter or |
| \fBrequest\-pull\fR |
| summary\&. |
| .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 switch my2\&.6\&.14 |
| .fi |
| .if n \{\ |
| .RE |
| .\} |
| .TS |
| tab(:); |
| r lw(\n(.lu*75u/100u). |
| \fB1.\fR\h'-2n':T{ |
| This step and the next one could be combined into a single step with "checkout \-b my2\&.6\&.14 v2\&.6\&.14"\&. |
| T} |
| .TE |
| .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 |
| .\} |
| .TS |
| tab(:); |
| r lw(\n(.lu*75u/100u). |
| \fB1.\fR\h'-2n':T{ |
| Delete the remote\-tracking branches "todo", "html" and "man"\&. The next |
| \fBgit\fR |
| \fBfetch\fR |
| or |
| \fBgit\fR |
| \fBpull\fR |
| will create them again unless you configure them not to\&. See |
| \fBgit-fetch\fR(1)\&. |
| T} |
| \fB2.\fR\h'-2n':T{ |
| Delete the "test" branch even if the "master" branch (or whichever branch is currently checked out) does not have all commits from the test branch\&. |
| T} |
| .TE |
| .RE |
| .PP |
| Listing branches from a specific remote |
| .RS 4 |
| .sp |
| .if n \{\ |
| .RS 4 |
| .\} |
| .nf |
| $ git branch \-r \-l \*(Aq<remote>/<pattern>\*(Aq \fB(1)\fR |
| $ git for\-each\-ref \*(Aqrefs/remotes/<remote>/<pattern>\*(Aq \fB(2)\fR |
| .fi |
| .if n \{\ |
| .RE |
| .\} |
| .TS |
| tab(:); |
| r lw(\n(.lu*75u/100u). |
| \fB1.\fR\h'-2n':T{ |
| Using |
| \fB\-a\fR |
| would conflate |
| \fI<remote>\fR |
| with any local branches you happen to have been prefixed with the same |
| \fI<remote>\fR |
| pattern\&. |
| T} |
| \fB2.\fR\h'-2n':T{ |
| \fBfor\-each\-ref\fR |
| can take a wide range of options\&. See |
| \fBgit-for-each-ref\fR(1) |
| T} |
| .TE |
| .RE |
| .sp |
| Patterns will normally need quoting\&. |
| .SH "NOTES" |
| .sp |
| If you are creating a branch that you want to switch to immediately, it is easier to use the \fBgit\fR \fBswitch\fR command with its \fB\-c\fR option to do the same thing with a single command\&. |
| .sp |
| The options \fB\-\-contains\fR, \fB\-\-no\-contains\fR, \fB\-\-merged\fR and \fB\-\-no\-merged\fR serve four related but different purposes: |
| .sp |
| .RS 4 |
| .ie n \{\ |
| \h'-04'\(bu\h'+03'\c |
| .\} |
| .el \{\ |
| .sp -1 |
| .IP \(bu 2.3 |
| .\} |
| \fB\-\-contains\fR |
| \fI<commit>\fR |
| is used to find all branches which will need special attention if |
| \fI<commit>\fR |
| were to be rebased or amended, since those branches contain the specified |
| \fI<commit>\fR\&. |
| .RE |
| .sp |
| .RS 4 |
| .ie n \{\ |
| \h'-04'\(bu\h'+03'\c |
| .\} |
| .el \{\ |
| .sp -1 |
| .IP \(bu 2.3 |
| .\} |
| \fB\-\-no\-contains\fR |
| \fI<commit>\fR |
| is the inverse of that, i\&.e\&. branches that don\(cqt contain the specified |
| \fI<commit>\fR\&. |
| .RE |
| .sp |
| .RS 4 |
| .ie n \{\ |
| \h'-04'\(bu\h'+03'\c |
| .\} |
| .el \{\ |
| .sp -1 |
| .IP \(bu 2.3 |
| .\} |
| \fB\-\-merged\fR |
| is used to find all branches which can be safely deleted, since those branches are fully contained by |
| \fBHEAD\fR\&. |
| .RE |
| .sp |
| .RS 4 |
| .ie n \{\ |
| \h'-04'\(bu\h'+03'\c |
| .\} |
| .el \{\ |
| .sp -1 |
| .IP \(bu 2.3 |
| .\} |
| \fB\-\-no\-merged\fR |
| is used to find branches which are candidates for merging into |
| \fBHEAD\fR, since those branches are not fully contained by |
| \fBHEAD\fR\&. |
| .RE |
| .sp |
| When combining multiple \fB\-\-contains\fR and \fB\-\-no\-contains\fR filters, only references that contain at least one of the \fB\-\-contains\fR commits and contain none of the \fB\-\-no\-contains\fR commits are shown\&. |
| .sp |
| When combining multiple \fB\-\-merged\fR and \fB\-\-no\-merged\fR filters, only references that are reachable from at least one of the \fB\-\-merged\fR commits and from none of the \fB\-\-no\-merged\fR commits are shown\&. |
| .SH "SEE ALSO" |
| .sp |
| \fBgit-check-ref-format\fR(1), \fBgit-fetch\fR(1), \fBgit-remote\fR(1), \m[blue]\fB"Understanding history: What is a branch?"\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 |
| "Understanding history: What is a branch?" |
| .RS 4 |
| \%git-htmldocs/user-manual.html#what-is-a-branch |
| .RE |