3 .\" Author: [FIXME: author] [see http://www.docbook.org/tdg5/en/html/author]
4 .\" Generator: DocBook XSL Stylesheets vsnapshot <http://docbook.sf.net/>
7 .\" Source: Git 2.46.0.rc0.75.g04f5a52757
10 .TH "GIT\-BRANCH" "1" "2024\-07\-16" "Git 2\&.46\&.0\&.rc0\&.75\&.g0" "Git Manual"
11 .\" -----------------------------------------------------------------
12 .\" * Define some portability stuff
13 .\" -----------------------------------------------------------------
14 .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15 .\" http://bugs.debian.org/507673
16 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
17 .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20 .\" -----------------------------------------------------------------
21 .\" * set default formatting
22 .\" -----------------------------------------------------------------
23 .\" disable hyphenation
25 .\" disable justification (adjust text to left margin only)
27 .\" -----------------------------------------------------------------
28 .\" * MAIN CONTENT STARTS HERE *
29 .\" -----------------------------------------------------------------
31 git-branch \- List, create, or delete branches
35 \fIgit branch\fR [\-\-color[=<when>] | \-\-no\-color] [\-\-show\-current]
36 [\-v [\-\-abbrev=<n> | \-\-no\-abbrev]]
37 [\-\-column[=<options>] | \-\-no\-column] [\-\-sort=<key>]
38 [\-\-merged [<commit>]] [\-\-no\-merged [<commit>]]
39 [\-\-contains [<commit>]] [\-\-no\-contains [<commit>]]
40 [\-\-points\-at <object>] [\-\-format=<format>]
41 [(\-r | \-\-remotes) | (\-a | \-\-all)]
42 [\-\-list] [<pattern>\&...]
43 \fIgit branch\fR [\-\-track[=(direct|inherit)] | \-\-no\-track] [\-f]
44 [\-\-recurse\-submodules] <branchname> [<start\-point>]
45 \fIgit branch\fR (\-\-set\-upstream\-to=<upstream> | \-u <upstream>) [<branchname>]
46 \fIgit branch\fR \-\-unset\-upstream [<branchname>]
47 \fIgit branch\fR (\-m | \-M) [<oldbranch>] <newbranch>
48 \fIgit branch\fR (\-c | \-C) [<oldbranch>] <newbranch>
49 \fIgit branch\fR (\-d | \-D) [\-r] <branchname>\&...
50 \fIgit branch\fR \-\-edit\-description [<branchname>]
55 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\&.
57 If a \fB<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\&.
59 Note that when providing a \fB<pattern>\fR, you must use \fB\-\-list\fR; otherwise the command may be interpreted as branch creation\&.
61 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 <commit> argument is missing it defaults to \fBHEAD\fR (i\&.e\&. the tip of the current branch)\&.
63 The command\(cqs second form creates a new branch head named <branchname> which points to the current \fBHEAD\fR, or <start\-point> if given\&. As a special case, for <start\-point>, you may use \fB"A\&.\&.\&.B"\fR as a shortcut for the merge base of \fBA\fR and \fBB\fR if there is exactly one merge base\&. You can leave out at most one of \fBA\fR and \fBB\fR, in which case it defaults to \fBHEAD\fR\&.
65 Note that this will create the new branch, but it will not switch the working tree to it; use "git switch <newbranch>" to switch to the new branch\&.
67 When a local branch is started off a remote\-tracking branch, Git sets up the branch (specifically the \fBbranch\&.<name>\&.remote\fR and \fBbranch\&.<name>\&.merge\fR configuration entries) so that \fIgit pull\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 branch \-\-set\-upstream\-to\fR\&.
69 With a \fB\-m\fR or \fB\-M\fR option, <oldbranch> will be renamed to <newbranch>\&. If <oldbranch> had a corresponding reflog, it is renamed to match <newbranch>, and a reflog entry is created to remember the branch renaming\&. If <newbranch> exists, \-M must be used to force the rename to happen\&.
71 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\&.
73 With a \fB\-d\fR or \fB\-D\fR option, \fB<branchname>\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\&.
75 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 \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\&.
80 Delete a branch\&. The branch must be fully merged in its upstream branch, or in
82 if no upstream was set with
85 \fB\-\-set\-upstream\-to\fR\&.
91 \fB\-\-delete \-\-force\fR\&.
96 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 "<branchname>@{yesterday}"\&. Note that in non\-bare repositories, reflogs are usually enabled by default by the
97 \fBcore\&.logAllRefUpdates\fR
98 config option\&. The negated form
99 \fB\-\-no\-create\-reflog\fR
100 only overrides an earlier
101 \fB\-\-create\-reflog\fR, but currently does not negate the setting of
102 \fBcore\&.logAllRefUpdates\fR\&.
107 Reset <branchname> to <start\-point>, even if <branchname> exists already\&. Without
110 refuses to change an existing branch\&. In combination with
113 \fB\-\-delete\fR), allow deleting the branch irrespective of its merged status, or whether it even points to a valid commit\&. In combination with
116 \fB\-\-move\fR), allow renaming the branch even if the new branch name already exists, the same applies for
122 \fIgit branch \-f <branchname> [<start\-point>]\fR, even with
123 \fI\-f\fR, refuses to change an existing branch
125 that is checked out in another worktree linked to the same repository\&.
130 Move/rename a branch, together with its config and reflog\&.
136 \fB\-\-move \-\-force\fR\&.
141 Copy a branch, together with its config and reflog\&.
147 \fB\-\-copy \-\-force\fR\&.
152 Color branches to highlight current, local, and remote\-tracking branches\&. The value must be always (the default), never, or auto\&.
157 Turn off branch colors, even when the configuration file gives the default to color output\&. Same as
158 \fB\-\-color=never\fR\&.
161 \-i, \-\-ignore\-case
163 Sorting and filtering branches are case insensitive\&.
168 Do not print a newline after formatted refs where the format expands to the empty string\&.
171 \-\-column[=<options>], \-\-no\-column
173 Display branch listing in columns\&. See configuration variable
174 \fBcolumn\&.branch\fR
179 without options are equivalent to
185 This option is only applicable in non\-verbose mode\&.
190 List or delete (if used with \-d) the remote\-tracking branches\&. Combine with
192 to match the optional pattern(s)\&.
197 List both remote\-tracking branches and local branches\&. Combine with
199 to match optional pattern(s)\&.
204 List branches\&. With optional
205 \fB<pattern>\&.\&.\&.\fR, e\&.g\&.
206 \fBgit branch \-\-list \*(Aqmaint\-*\*(Aq\fR, list only the branches that match the pattern(s)\&.
211 Print the name of the current branch\&. In detached HEAD state, nothing is printed\&.
214 \-v, \-vv, \-\-verbose
216 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
217 \fBgit remote show <remote>\fR)\&. Note that the current worktree\(cqs HEAD will not have its path printed (it will always be your current directory)\&.
222 Be more quiet when creating or deleting a branch, suppressing non\-error messages\&.
227 In the verbose listing that show the commit object name, show the shortest prefix that is at least
229 hexdigits long that uniquely refers the object\&. The default value is 7 and can be overridden by the
236 Display the full sha1s in the output listing rather than abbreviating them\&.
239 \-t, \-\-track[=(direct|inherit)]
241 When creating a new branch, set up
242 \fBbranch\&.<name>\&.remote\fR
244 \fBbranch\&.<name>\&.merge\fR
245 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
248 \fBgit branch \-v\fR\&. Furthermore, it directs
250 without arguments to pull from the upstream when the new branch is checked out\&.
252 The exact upstream branch is chosen depending on the optional argument:
255 \fB\-\-track=direct\fR
256 means to use the start\-point branch itself as the upstream;
257 \fB\-\-track=inherit\fR
258 means to copy the upstream configuration of the start\-point branch\&.
260 The branch\&.autoSetupMerge configuration variable specifies how
265 should behave when neither
272 \fBtrue\fR, behaves as though
273 \fB\-\-track=direct\fR
274 were given whenever the start\-point is a remote\-tracking branch\&.
281 \fB\-\-track=direct\fR
285 \fB\-\-track=inherit\fR
289 \fB\-\-track=direct\fR
290 were given only when the start\-point is a remote\-tracking branch and the new branch has the same name as the remote branch\&.
296 for additional discussion on how the
297 \fBbranch\&.<name>\&.remote\fR
299 \fBbranch\&.<name>\&.merge\fR
305 Do not set up "upstream" configuration, even if the branch\&.autoSetupMerge configuration variable is set\&.
308 \-\-recurse\-submodules
310 THIS OPTION IS EXPERIMENTAL! Causes the current command to recurse into submodules if
311 \fBsubmodule\&.propagateBranches\fR
313 \fBsubmodule\&.propagateBranches\fR
315 \fBgit-config\fR(1)\&. Currently, only branch creation is supported\&.
317 When used in branch creation, a new branch <branchname> will be created in the superproject and all of the submodules in the superproject\(cqs <start\-point>\&. In submodules, the branch will point to the submodule commit in the superproject\(cqs <start\-point> but the branch\(cqs tracking information will be set up based on the submodule\(cqs branches and remotes e\&.g\&.
318 \fBgit branch \-\-recurse\-submodules topic origin/main\fR
319 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"\&.
324 As this option had confusing syntax, it is no longer supported\&. Please use
327 \fB\-\-set\-upstream\-to\fR
331 \-u <upstream>, \-\-set\-upstream\-to=<upstream>
333 Set up <branchname>\*(Aqs tracking information so <upstream> is considered <branchname>\*(Aqs upstream branch\&. If no <branchname> is specified, then it defaults to the current branch\&.
338 Remove the upstream information for <branchname>\&. If no branch is specified it defaults to the current branch\&.
341 \-\-edit\-description
343 Open an editor and edit the text to explain what the branch is for, to be used by various other commands (e\&.g\&.
345 \fBrequest\-pull\fR, and
347 (if enabled))\&. Multi\-line explanations may be used\&.
350 \-\-contains [<commit>]
352 Only list branches which contain the specified commit (HEAD if not specified)\&. Implies
356 \-\-no\-contains [<commit>]
358 Only list branches which don\(cqt contain the specified commit (HEAD if not specified)\&. Implies
362 \-\-merged [<commit>]
364 Only list branches whose tips are reachable from the specified commit (HEAD if not specified)\&. Implies
368 \-\-no\-merged [<commit>]
370 Only list branches whose tips are not reachable from the specified commit (HEAD if not specified)\&. Implies
376 The name of the branch to create or delete\&. The new branch name must pass all checks defined by
377 \fBgit-check-ref-format\fR(1)\&. Some of these checks may restrict the characters allowed in a branch name\&.
382 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\&.
387 The name of an existing branch\&. If this option is omitted, the name of the current branch will be used instead\&.
392 The new name for an existing branch\&. The same restrictions as for <branchname> apply\&.
397 Sort based on the key given\&. Prefix
399 to sort in descending order of the value\&. You may use the \-\-sort=<key> option multiple times, in which case the last key becomes the primary key\&. The keys supported are the same as those in
400 \fBgit for\-each\-ref\fR\&. Sort order defaults to the value configured for the
402 variable if it exists, or to sorting based on the full refname (including
404 prefix)\&. This lists detached HEAD (if present) first, then local branches and finally remote\-tracking branches\&. See
405 \fBgit-config\fR(1)\&.
408 \-\-points\-at <object>
410 Only list branches of the given object\&.
415 A string that interpolates
417 from a branch ref being shown and the object it points at\&. The format is the same as that of
418 \fBgit-for-each-ref\fR(1)\&.
422 \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)\&.
424 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:
426 branch\&.autoSetupMerge
433 to set up new branches so that
435 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
439 options\&. The valid settings are:
440 \fBfalse\fR \(em no automatic setup is done;
441 \fBtrue\fR \(em automatic setup is done when the starting point is a remote\-tracking branch;
442 \fBalways\fR \(em automatic setup is done when the starting point is either a local branch or remote\-tracking branch;
443 \fBinherit\fR \(em if the starting point has a tracking configuration, it is copied to the new branch;
444 \fBsimple\fR \(em 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\&. This option defaults to true\&.
447 branch\&.autoSetupRebase
449 When a new branch is created with
454 that tracks another branch, this variable tells Git to set up pull to rebase instead of merge (see "branch\&.<name>\&.rebase")\&. When
455 \fBnever\fR, rebase is never automatically set to true\&. When
456 \fBlocal\fR, rebase is set to true for tracked branches of other local branches\&. When
457 \fBremote\fR, rebase is set to true for tracked branches of remote\-tracking branches\&. When
458 \fBalways\fR, rebase will be set to true for all tracking branches\&. See "branch\&.autoSetupMerge" for details on how to set up a branch to track another branch\&. This option defaults to never\&.
463 This variable controls the sort ordering of branches when displayed by
464 \fBgit-branch\fR(1)\&. Without the "\-\-sort=<value>" option provided, the value of this variable will be used as the default\&. See
465 \fBgit-for-each-ref\fR(1)
466 field names for valid values\&.
469 branch\&.<name>\&.remote
471 When on branch <name>, it tells
475 which remote to fetch from or push to\&. The remote to push to may be overridden with
476 \fBremote\&.pushDefault\fR
477 (for all branches)\&. The remote to push to, for the current branch, may be further overridden by
478 \fBbranch\&.<name>\&.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
481 \fBremote\&.pushDefault\fR
482 for pushing\&. Additionally,
484 (a period) is the current local repository (a dot\-repository), see
485 \fBbranch\&.<name>\&.merge\fR\*(Aqs final note below\&.
488 branch\&.<name>\&.pushRemote
490 When on branch <name>, it overrides
491 \fBbranch\&.<name>\&.remote\fR
492 for pushing\&. It also overrides
493 \fBremote\&.pushDefault\fR
494 for pushing from branch <name>\&. 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
495 \fBremote\&.pushDefault\fR
496 to specify the remote to push to for all branches, and use this option to override it for a specific branch\&.
499 branch\&.<name>\&.merge
501 Defines, together with branch\&.<name>\&.remote, the upstream branch for the given branch\&. It tells
502 \fIgit fetch\fR/\fIgit pull\fR/\fIgit rebase\fR
503 which branch to merge and can also affect
505 (see push\&.default)\&. When in branch <name>, it tells
507 the default refspec to be marked for merging in FETCH_HEAD\&. The value is handled like the remote part of a refspec, and must match a ref which is fetched from the remote given by "branch\&.<name>\&.remote"\&. The merge information is used by
510 \fIgit fetch\fR) to lookup the default branch for merging\&. Without this option,
512 defaults to merge the first refspec fetched\&. Specify multiple values to get an octopus merge\&. If you wish to setup
514 so that it merges into <name> from another branch in the local repository, you can point branch\&.<name>\&.merge to the desired branch, and use the relative path setting
516 (a period) for branch\&.<name>\&.remote\&.
519 branch\&.<name>\&.mergeOptions
521 Sets default options for merging into branch <name>\&. The syntax and supported options are the same as those of
522 \fBgit-merge\fR(1), but option values containing whitespace characters are currently not supported\&.
525 branch\&.<name>\&.rebase
527 When true, rebase the branch <name> on top of the fetched branch, instead of merging the default branch from the default remote when "git pull" is run\&. See "pull\&.rebase" for doing this in a non branch\-specific manner\&.
533 \fB\-\-rebase\-merges\fR
536 so that the local merge commits are included in the rebase (see
543 \fIi\fR), the rebase is run in interactive mode\&.
545 \fBNOTE\fR: this is a possibly dangerous operation; do
547 use it unless you understand the implications (see
552 branch\&.<name>\&.description
554 Branch description, can be edited with
555 \fBgit branch \-\-edit\-description\fR\&. Branch description is automatically added to the format\-patch cover letter or request\-pull summary\&.
559 Start development from a known tag
566 $ git clone git://git\&.kernel\&.org/pub/scm/\&.\&.\&./linux\-2\&.6 my2\&.6
568 $ git branch my2\&.6\&.14 v2\&.6\&.14 \fB(1)\fR
569 $ git switch my2\&.6\&.14
577 r lw(\n(.lu*75u/100u).
579 This step and the next one could be combined into a single step with "checkout \-b my2\&.6\&.14 v2\&.6\&.14"\&.
584 Delete an unneeded branch
591 $ git clone git://git\&.kernel\&.org/\&.\&.\&./git\&.git my\&.git
593 $ git branch \-d \-r origin/todo origin/html origin/man \fB(1)\fR
594 $ git branch \-D test \fB(2)\fR
602 r lw(\n(.lu*75u/100u).
604 Delete the remote\-tracking branches "todo", "html" and "man"\&. The next
608 will create them again unless you configure them not to\&. See
609 \fBgit-fetch\fR(1)\&.
612 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\&.
617 Listing branches from a specific remote
624 $ git branch \-r \-l \*(Aq<remote>/<pattern>\*(Aq \fB(1)\fR
625 $ git for\-each\-ref \*(Aqrefs/remotes/<remote>/<pattern>\*(Aq \fB(2)\fR
633 r lw(\n(.lu*75u/100u).
637 would conflate <remote> with any local branches you happen to have been prefixed with the same <remote> pattern\&.
641 can take a wide range of options\&. See
642 \fBgit-for-each-ref\fR(1)
647 Patterns will normally need quoting\&.
650 If you are creating a branch that you want to switch to immediately, it is easier to use the "git switch" command with its \fB\-c\fR option to do the same thing with a single command\&.
652 The options \fB\-\-contains\fR, \fB\-\-no\-contains\fR, \fB\-\-merged\fR and \fB\-\-no\-merged\fR serve four related but different purposes:
662 \fB\-\-contains <commit>\fR
663 is used to find all branches which will need special attention if <commit> were to be rebased or amended, since those branches contain the specified <commit>\&.
674 \fB\-\-no\-contains <commit>\fR
675 is the inverse of that, i\&.e\&. branches that don\(cqt contain the specified <commit>\&.
687 is used to find all branches which can be safely deleted, since those branches are fully contained by HEAD\&.
699 is used to find branches which are candidates for merging into HEAD, since those branches are not fully contained by HEAD\&.
702 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\&.
704 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\&.
707 \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\&.
710 Part of the \fBgit\fR(1) suite
713 \(lqUnderstanding history: What is a branch?\(rq
715 \%git-htmldocs/user-manual.html#what-is-a-branch