1GIT-BRANCH(1) Git Manual GIT-BRANCH(1)
2
3
4
6 git-branch - List, create, or delete branches
7
9 git branch [--color[=<when>] | --no-color] [--show-current]
10 [-v [--abbrev=<n> | --no-abbrev]]
11 [--column[=<options>] | --no-column] [--sort=<key>]
12 [--merged [<commit>]] [--no-merged [<commit>]]
13 [--contains [<commit>]] [--no-contains [<commit>]]
14 [--points-at <object>] [--format=<format>]
15 [(-r | --remotes) | (-a | --all)]
16 [--list] [<pattern>...]
17 git branch [--track[=(direct|inherit)] | --no-track] [-f]
18 [--recurse-submodules] <branchname> [<start-point>]
19 git branch (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
20 git branch --unset-upstream [<branchname>]
21 git branch (-m | -M) [<oldbranch>] <newbranch>
22 git branch (-c | -C) [<oldbranch>] <newbranch>
23 git branch (-d | -D) [-r] <branchname>...
24 git branch --edit-description [<branchname>]
25
27 If --list is given, or if there are no non-option arguments, existing
28 branches are listed; the current branch will be highlighted in green
29 and marked with an asterisk. Any branches checked out in linked
30 worktrees will be highlighted in cyan and marked with a plus sign.
31 Option -r causes the remote-tracking branches to be listed, and option
32 -a shows both local and remote branches.
33
34 If a <pattern> is given, it is used as a shell wildcard to restrict the
35 output to matching branches. If multiple patterns are given, a branch
36 is shown if it matches any of the patterns.
37
38 Note that when providing a <pattern>, you must use --list; otherwise
39 the command may be interpreted as branch creation.
40
41 With --contains, shows only the branches that contain the named commit
42 (in other words, the branches whose tip commits are descendants of the
43 named commit), --no-contains inverts it. With --merged, only branches
44 merged into the named commit (i.e. the branches whose tip commits are
45 reachable from the named commit) will be listed. With --no-merged only
46 branches not merged into the named commit will be listed. If the
47 <commit> argument is missing it defaults to HEAD (i.e. the tip of the
48 current branch).
49
50 The command’s second form creates a new branch head named <branchname>
51 which points to the current HEAD, or <start-point> if given. As a
52 special case, for <start-point>, you may use "A...B" as a shortcut for
53 the merge base of A and B if there is exactly one merge base. You can
54 leave out at most one of A and B, in which case it defaults to HEAD.
55
56 Note that this will create the new branch, but it will not switch the
57 working tree to it; use "git switch <newbranch>" to switch to the new
58 branch.
59
60 When a local branch is started off a remote-tracking branch, Git sets
61 up the branch (specifically the branch.<name>.remote and
62 branch.<name>.merge configuration entries) so that git pull will
63 appropriately merge from the remote-tracking branch. This behavior may
64 be changed via the global branch.autoSetupMerge configuration flag.
65 That setting can be overridden by using the --track and --no-track
66 options, and changed later using git branch --set-upstream-to.
67
68 With a -m or -M option, <oldbranch> will be renamed to <newbranch>. If
69 <oldbranch> had a corresponding reflog, it is renamed to match
70 <newbranch>, and a reflog entry is created to remember the branch
71 renaming. If <newbranch> exists, -M must be used to force the rename to
72 happen.
73
74 The -c and -C options have the exact same semantics as -m and -M,
75 except instead of the branch being renamed, it will be copied to a new
76 name, along with its config and reflog.
77
78 With a -d or -D option, <branchname> will be deleted. You may specify
79 more than one branch for deletion. If the branch currently has a reflog
80 then the reflog will also be deleted.
81
82 Use -r together with -d to delete remote-tracking branches. Note, that
83 it only makes sense to delete remote-tracking branches if they no
84 longer exist in the remote repository or if git fetch was configured
85 not to fetch them again. See also the prune subcommand of git-remote(1)
86 for a way to clean up all obsolete remote-tracking branches.
87
89 -d, --delete
90 Delete a branch. The branch must be fully merged in its upstream
91 branch, or in HEAD if no upstream was set with --track or
92 --set-upstream-to.
93
94 -D
95 Shortcut for --delete --force.
96
97 --create-reflog
98 Create the branch’s reflog. This activates recording of all changes
99 made to the branch ref, enabling use of date based sha1 expressions
100 such as "<branchname>@{yesterday}". Note that in non-bare
101 repositories, reflogs are usually enabled by default by the
102 core.logAllRefUpdates config option. The negated form
103 --no-create-reflog only overrides an earlier --create-reflog, but
104 currently does not negate the setting of core.logAllRefUpdates.
105
106 -f, --force
107 Reset <branchname> to <startpoint>, even if <branchname> exists
108 already. Without -f, git branch refuses to change an existing
109 branch. In combination with -d (or --delete), allow deleting the
110 branch irrespective of its merged status, or whether it even points
111 to a valid commit. In combination with -m (or --move), allow
112 renaming the branch even if the new branch name already exists, the
113 same applies for -c (or --copy).
114
115 -m, --move
116 Move/rename a branch, together with its config and reflog.
117
118 -M
119 Shortcut for --move --force.
120
121 -c, --copy
122 Copy a branch, together with its config and reflog.
123
124 -C
125 Shortcut for --copy --force.
126
127 --color[=<when>]
128 Color branches to highlight current, local, and remote-tracking
129 branches. The value must be always (the default), never, or auto.
130
131 --no-color
132 Turn off branch colors, even when the configuration file gives the
133 default to color output. Same as --color=never.
134
135 -i, --ignore-case
136 Sorting and filtering branches are case insensitive.
137
138 --column[=<options>], --no-column
139 Display branch listing in columns. See configuration variable
140 column.branch for option syntax. --column and --no-column without
141 options are equivalent to always and never respectively.
142
143 This option is only applicable in non-verbose mode.
144
145 -r, --remotes
146 List or delete (if used with -d) the remote-tracking branches.
147 Combine with --list to match the optional pattern(s).
148
149 -a, --all
150 List both remote-tracking branches and local branches. Combine with
151 --list to match optional pattern(s).
152
153 -l, --list
154 List branches. With optional <pattern>..., e.g. git branch --list
155 'maint-*', list only the branches that match the pattern(s).
156
157 --show-current
158 Print the name of the current branch. In detached HEAD state,
159 nothing is printed.
160
161 -v, -vv, --verbose
162 When in list mode, show sha1 and commit subject line for each head,
163 along with relationship to upstream branch (if any). If given
164 twice, print the path of the linked worktree (if any) and the name
165 of the upstream branch, as well (see also git remote show
166 <remote>). Note that the current worktree’s HEAD will not have its
167 path printed (it will always be your current directory).
168
169 -q, --quiet
170 Be more quiet when creating or deleting a branch, suppressing
171 non-error messages.
172
173 --abbrev=<n>
174 In the verbose listing that show the commit object name, show the
175 shortest prefix that is at least <n> hexdigits long that uniquely
176 refers the object. The default value is 7 and can be overridden by
177 the core.abbrev config option.
178
179 --no-abbrev
180 Display the full sha1s in the output listing rather than
181 abbreviating them.
182
183 -t, --track[=(direct|inherit)]
184 When creating a new branch, set up branch.<name>.remote and
185 branch.<name>.merge configuration entries to set "upstream"
186 tracking configuration for the new branch. This configuration will
187 tell git to show the relationship between the two branches in git
188 status and git branch -v. Furthermore, it directs git pull without
189 arguments to pull from the upstream when the new branch is checked
190 out.
191
192 The exact upstream branch is chosen depending on the optional
193 argument: -t, --track, or --track=direct means to use the
194 start-point branch itself as the upstream; --track=inherit means to
195 copy the upstream configuration of the start-point branch.
196
197 The branch.autoSetupMerge configuration variable specifies how git
198 switch, git checkout and git branch should behave when neither
199 --track nor --no-track are specified:
200
201 The default option, true, behaves as though --track=direct were
202 given whenever the start-point is a remote-tracking branch. false
203 behaves as if --no-track were given. always behaves as though
204 --track=direct were given. inherit behaves as though
205 --track=inherit were given. simple behaves as though
206 --track=direct were given only when the start-point is a
207 remote-tracking branch and the new branch has the same name as the
208 remote branch.
209
210 See git-pull(1) and git-config(1) for additional discussion on how
211 the branch.<name>.remote and branch.<name>.merge options are used.
212
213 --no-track
214 Do not set up "upstream" configuration, even if the
215 branch.autoSetupMerge configuration variable is set.
216
217 --recurse-submodules
218 THIS OPTION IS EXPERIMENTAL! Causes the current command to recurse
219 into submodules if submodule.propagateBranches is enabled. See
220 submodule.propagateBranches in git-config(1). Currently, only
221 branch creation is supported.
222
223 When used in branch creation, a new branch <branchname> will be
224 created in the superproject and all of the submodules in the
225 superproject’s <start-point>. In submodules, the branch will point
226 to the submodule commit in the superproject’s <start-point> but the
227 branch’s tracking information will be set up based on the
228 submodule’s branches and remotes e.g. git branch
229 --recurse-submodules topic origin/main will create the submodule
230 branch "topic" that points to the submodule commit in the
231 superproject’s "origin/main", but tracks the submodule’s
232 "origin/main".
233
234 --set-upstream
235 As this option had confusing syntax, it is no longer supported.
236 Please use --track or --set-upstream-to instead.
237
238 -u <upstream>, --set-upstream-to=<upstream>
239 Set up <branchname>'s tracking information so <upstream> is
240 considered <branchname>'s upstream branch. If no <branchname> is
241 specified, then it defaults to the current branch.
242
243 --unset-upstream
244 Remove the upstream information for <branchname>. If no branch is
245 specified it defaults to the current branch.
246
247 --edit-description
248 Open an editor and edit the text to explain what the branch is for,
249 to be used by various other commands (e.g. format-patch,
250 request-pull, and merge (if enabled)). Multi-line explanations may
251 be used.
252
253 --contains [<commit>]
254 Only list branches which contain the specified commit (HEAD if not
255 specified). Implies --list.
256
257 --no-contains [<commit>]
258 Only list branches which don’t contain the specified commit (HEAD
259 if not specified). Implies --list.
260
261 --merged [<commit>]
262 Only list branches whose tips are reachable from the specified
263 commit (HEAD if not specified). Implies --list.
264
265 --no-merged [<commit>]
266 Only list branches whose tips are not reachable from the specified
267 commit (HEAD if not specified). Implies --list.
268
269 <branchname>
270 The name of the branch to create or delete. The new branch name
271 must pass all checks defined by git-check-ref-format(1). Some of
272 these checks may restrict the characters allowed in a branch name.
273
274 <start-point>
275 The new branch head will point to this commit. It may be given as a
276 branch name, a commit-id, or a tag. If this option is omitted, the
277 current HEAD will be used instead.
278
279 <oldbranch>
280 The name of an existing branch to rename.
281
282 <newbranch>
283 The new name for an existing branch. The same restrictions as for
284 <branchname> apply.
285
286 --sort=<key>
287 Sort based on the key given. Prefix - to sort in descending order
288 of the value. You may use the --sort=<key> option multiple times,
289 in which case the last key becomes the primary key. The keys
290 supported are the same as those in git for-each-ref. Sort order
291 defaults to the value configured for the branch.sort variable if
292 exists, or to sorting based on the full refname (including refs/...
293 prefix). This lists detached HEAD (if present) first, then local
294 branches and finally remote-tracking branches. See git-config(1).
295
296 --points-at <object>
297 Only list branches of the given object.
298
299 --format <format>
300 A string that interpolates %(fieldname) from a branch ref being
301 shown and the object it points at. The format is the same as that
302 of git-for-each-ref(1).
303
305 pager.branch is only respected when listing branches, i.e., when --list
306 is used or implied. The default is to use a pager. See git-config(1).
307
308 Everything above this line in this section isn’t included from the git-
309 config(1) documentation. The content that follows is the same as what’s
310 found there:
311
312 branch.autoSetupMerge
313 Tells git branch, git switch and git checkout to set up new
314 branches so that git-pull(1) will appropriately merge from the
315 starting point branch. Note that even if this option is not set,
316 this behavior can be chosen per-branch using the --track and
317 --no-track options. The valid settings are: false — no automatic
318 setup is done; true — automatic setup is done when the starting
319 point is a remote-tracking branch; always — automatic setup is done
320 when the starting point is either a local branch or remote-tracking
321 branch; inherit — if the starting point has a tracking
322 configuration, it is copied to the new branch; simple — automatic
323 setup is done only when the starting point is a remote-tracking
324 branch and the new branch has the same name as the remote branch.
325 This option defaults to true.
326
327 branch.autoSetupRebase
328 When a new branch is created with git branch, git switch or git
329 checkout that tracks another branch, this variable tells Git to set
330 up pull to rebase instead of merge (see "branch.<name>.rebase").
331 When never, rebase is never automatically set to true. When local,
332 rebase is set to true for tracked branches of other local branches.
333 When remote, rebase is set to true for tracked branches of
334 remote-tracking branches. When always, rebase will be set to true
335 for all tracking branches. See "branch.autoSetupMerge" for details
336 on how to set up a branch to track another branch. This option
337 defaults to never.
338
339 branch.sort
340 This variable controls the sort ordering of branches when displayed
341 by git-branch(1). Without the "--sort=<value>" option provided, the
342 value of this variable will be used as the default. See git-for-
343 each-ref(1) field names for valid values.
344
345 branch.<name>.remote
346 When on branch <name>, it tells git fetch and git push which remote
347 to fetch from/push to. The remote to push to may be overridden with
348 remote.pushDefault (for all branches). The remote to push to, for
349 the current branch, may be further overridden by
350 branch.<name>.pushRemote. If no remote is configured, or if you are
351 not on any branch and there is more than one remote defined in the
352 repository, it defaults to origin for fetching and
353 remote.pushDefault for pushing. Additionally, . (a period) is the
354 current local repository (a dot-repository), see
355 branch.<name>.merge's final note below.
356
357 branch.<name>.pushRemote
358 When on branch <name>, it overrides branch.<name>.remote for
359 pushing. It also overrides remote.pushDefault for pushing from
360 branch <name>. When you pull from one place (e.g. your upstream)
361 and push to another place (e.g. your own publishing repository),
362 you would want to set remote.pushDefault to specify the remote to
363 push to for all branches, and use this option to override it for a
364 specific branch.
365
366 branch.<name>.merge
367 Defines, together with branch.<name>.remote, the upstream branch
368 for the given branch. It tells git fetch/git pull/git rebase which
369 branch to merge and can also affect git push (see push.default).
370 When in branch <name>, it tells git fetch the default refspec to be
371 marked for merging in FETCH_HEAD. The value is handled like the
372 remote part of a refspec, and must match a ref which is fetched
373 from the remote given by "branch.<name>.remote". The merge
374 information is used by git pull (which at first calls git fetch) to
375 lookup the default branch for merging. Without this option, git
376 pull defaults to merge the first refspec fetched. Specify multiple
377 values to get an octopus merge. If you wish to setup git pull so
378 that it merges into <name> from another branch in the local
379 repository, you can point branch.<name>.merge to the desired
380 branch, and use the relative path setting . (a period) for
381 branch.<name>.remote.
382
383 branch.<name>.mergeOptions
384 Sets default options for merging into branch <name>. The syntax and
385 supported options are the same as those of git-merge(1), but option
386 values containing whitespace characters are currently not
387 supported.
388
389 branch.<name>.rebase
390 When true, rebase the branch <name> on top of the fetched branch,
391 instead of merging the default branch from the default remote when
392 "git pull" is run. See "pull.rebase" for doing this in a non
393 branch-specific manner.
394
395 When merges (or just m), pass the --rebase-merges option to git
396 rebase so that the local merge commits are included in the rebase
397 (see git-rebase(1) for details).
398
399 When the value is interactive (or just i), the rebase is run in
400 interactive mode.
401
402 NOTE: this is a possibly dangerous operation; do not use it unless
403 you understand the implications (see git-rebase(1) for details).
404
405 branch.<name>.description
406 Branch description, can be edited with git branch
407 --edit-description. Branch description is automatically added in
408 the format-patch cover letter or request-pull summary.
409
411 Start development from a known tag
412
413 $ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
414 $ cd my2.6
415 $ git branch my2.6.14 v2.6.14 [1m(1)
416 $ git switch my2.6.14
417
418 1. This step and the next one could be combined into a single
419 step with "checkout -b my2.6.14 v2.6.14".
420
421 Delete an unneeded branch
422
423 $ git clone git://git.kernel.org/.../git.git my.git
424 $ cd my.git
425 $ git branch -d -r origin/todo origin/html origin/man [1m(1)
426 $ git branch -D test [1m(2)
427
428 1. Delete the remote-tracking branches "todo", "html" and
429 "man". The next fetch or pull will create them again
430 unless you configure them not to. See git-fetch(1).
431 2. Delete the "test" branch even if the "master" branch (or
432 whichever branch is currently checked out) does not have
433 all commits from the test branch.
434
435 Listing branches from a specific remote
436
437 $ git branch -r -l '<remote>/<pattern>' [1m(1)
438 $ git for-each-ref 'refs/remotes/<remote>/<pattern>' [1m(2)
439
440 1. Using -a would conflate <remote> with any local branches
441 you happen to have been prefixed with the same <remote>
442 pattern.
443 2. for-each-ref can take a wide range of options. See git-
444 for-each-ref(1)
445
446 Patterns will normally need quoting.
447
449 If you are creating a branch that you want to switch to immediately, it
450 is easier to use the "git switch" command with its -c option to do the
451 same thing with a single command.
452
453 The options --contains, --no-contains, --merged and --no-merged serve
454 four related but different purposes:
455
456 • --contains <commit> is used to find all branches which will need
457 special attention if <commit> were to be rebased or amended, since
458 those branches contain the specified <commit>.
459
460 • --no-contains <commit> is the inverse of that, i.e. branches that
461 don’t contain the specified <commit>.
462
463 • --merged is used to find all branches which can be safely deleted,
464 since those branches are fully contained by HEAD.
465
466 • --no-merged is used to find branches which are candidates for
467 merging into HEAD, since those branches are not fully contained by
468 HEAD.
469
470 When combining multiple --contains and --no-contains filters, only
471 references that contain at least one of the --contains commits and
472 contain none of the --no-contains commits are shown.
473
474 When combining multiple --merged and --no-merged filters, only
475 references that are reachable from at least one of the --merged commits
476 and from none of the --no-merged commits are shown.
477
479 git-check-ref-format(1), git-fetch(1), git-remote(1), “Understanding
480 history: What is a branch?”[1] in the Git User’s Manual.
481
483 Part of the git(1) suite
484
486 1. “Understanding history: What is a branch?”
487 file:///usr/share/doc/git/user-manual.html#what-is-a-branch
488
489
490
491Git 2.39.1 2023-01-13 GIT-BRANCH(1)