]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-branch.txt
Merge branch 'jc/maint-column-doc-typofix'
[thirdparty/git.git] / Documentation / git-branch.txt
CommitLineData
215a7ad1
JH
1git-branch(1)
2=============
7fc9d69f
JH
3
4NAME
5----
c3f0baac 6git-branch - List, create, or delete branches
7fc9d69f
JH
7
8SYNOPSIS
9--------
dd181119 10[verse]
ecf55ae4 11'git branch' [--color[=<when>] | --no-color] [--show-current]
cda34e0d 12 [-v [--abbrev=<n> | --no-abbrev]]
783b8292 13 [--column[=<options>] | --no-column] [--sort=<key>]
21bf9339 14 [--merged [<commit>]] [--no-merged [<commit>]]
6069eccd 15 [--contains [<commit>]] [--no-contains [<commit>]]
1fde99cf
PO
16 [--points-at <object>] [--format=<format>]
17 [(-r | --remotes) | (-a | --all)]
18 [--list] [<pattern>...]
94a13806 19'git branch' [--track | --no-track] [-f] <branchname> [<start-point>]
6183d826 20'git branch' (--set-upstream-to=<upstream> | -u <upstream>) [<branchname>]
b84869ef 21'git branch' --unset-upstream [<branchname>]
b1889c36 22'git branch' (-m | -M) [<oldbranch>] <newbranch>
52d59cc6 23'git branch' (-c | -C) [<oldbranch>] <newbranch>
b1889c36 24'git branch' (-d | -D) [-r] <branchname>...
b7200e83 25'git branch' --edit-description [<branchname>]
7fc9d69f
JH
26
27DESCRIPTION
28-----------
049716b3 29
de90ff81 30If `--list` is given, or if there are no non-option arguments, existing
ab313814
NB
31branches are listed; the current branch will be highlighted in green and
32marked with an asterisk. Any branches checked out in linked worktrees will
33be highlighted in cyan and marked with a plus sign. Option `-r` causes the
34remote-tracking branches to be listed,
1fde99cf
PO
35and option `-a` shows both local and remote branches.
36
37If a `<pattern>`
de90ff81
JK
38is given, it is used as a shell wildcard to restrict the output to
39matching branches. If multiple patterns are given, a branch is shown if
1fde99cf
PO
40it matches any of the patterns.
41
42Note that when providing a
43`<pattern>`, you must use `--list`; otherwise the command may be interpreted
de90ff81 44as branch creation.
049716b3 45
e5ac1217
DM
46With `--contains`, shows only the branches that contain the named commit
47(in other words, the branches whose tip commits are descendants of the
783b8292
ÆAB
48named commit), `--no-contains` inverts it. With `--merged`, only branches
49merged into the named commit (i.e. the branches whose tip commits are
50reachable from the named commit) will be listed. With `--no-merged` only
51branches not merged into the named commit will be listed. If the <commit>
52argument is missing it defaults to `HEAD` (i.e. the tip of the current
53branch).
7fc9d69f 54
bb35f35e 55The command's second form creates a new branch head named <branchname>
e3d6539d
DL
56which points to the current `HEAD`, or <start-point> if given. As a
57special case, for <start-point>, you may use `"A...B"` as a shortcut for
58the merge base of `A` and `B` if there is exactly one merge base. You
59can leave out at most one of `A` and `B`, in which case it defaults to
60`HEAD`.
2eaf273d 61
46749204 62Note that this will create the new branch, but it will not switch the
328c6cb8 63working tree to it; use "git switch <newbranch>" to switch to the
46749204
FMQ
64new branch.
65
2de9b711 66When a local branch is started off a remote-tracking branch, Git sets up the
fef0e991
JH
67branch (specifically the `branch.<name>.remote` and `branch.<name>.merge`
68configuration entries) so that 'git pull' will appropriately merge from
29b9a66f 69the remote-tracking branch. This behavior may be changed via the global
da0005b8 70`branch.autoSetupMerge` configuration flag. That setting can be
4eec6f98 71overridden by using the `--track` and `--no-track` options, and
6183d826 72changed later using `git branch --set-upstream-to`.
0746d19a 73
3ea2232d 74With a `-m` or `-M` option, <oldbranch> will be renamed to <newbranch>.
c976d415
LH
75If <oldbranch> had a corresponding reflog, it is renamed to match
76<newbranch>, and a reflog entry is created to remember the branch
77renaming. If <newbranch> exists, -M must be used to force the rename
78to happen.
79
52d59cc6 80The `-c` and `-C` options have the exact same semantics as `-m` and
27dc071b
JK
81`-M`, except instead of the branch being renamed, it will be copied to a
82new name, along with its config and reflog.
52d59cc6 83
2eaf273d 84With a `-d` or `-D` option, `<branchname>` will be deleted. You may
3a4b3f26 85specify more than one branch for deletion. If the branch currently
1e72a40d
JH
86has a reflog then the reflog will also be deleted.
87
3ea2232d 88Use `-r` together with `-d` to delete remote-tracking branches. Note, that it
1e72a40d 89only makes sense to delete remote-tracking branches if they no longer exist
0b444cdb 90in the remote repository or if 'git fetch' was configured not to fetch
e5ac1217
DM
91them again. See also the 'prune' subcommand of linkgit:git-remote[1] for a
92way to clean up all obsolete remote-tracking branches.
dd181119
JL
93
94
7fc9d69f
JH
95OPTIONS
96-------
d4072c97 97-d::
171edcbb 98--delete::
fff0d0ab
JN
99 Delete a branch. The branch must be fully merged in its
100 upstream branch, or in `HEAD` if no upstream was set with
a060f3d3 101 `--track` or `--set-upstream-to`.
d4072c97
AE
102
103-D::
83fe1670 104 Shortcut for `--delete --force`.
d4072c97 105
171edcbb 106--create-reflog::
792d2370
JK
107 Create the branch's reflog. This activates recording of
108 all changes made to the branch ref, enabling use of date
967506bb 109 based sha1 expressions such as "<branchname>@\{yesterday}".
4c35f0db 110 Note that in non-bare repositories, reflogs are usually
c3342b36 111 enabled by default by the `core.logAllRefUpdates` config option.
67c70bd9
CW
112 The negated form `--no-create-reflog` only overrides an earlier
113 `--create-reflog`, but currently does not negate the setting of
c3342b36 114 `core.logAllRefUpdates`.
3a4b3f26 115
075dd8ee 116-f::
f7aec129 117--force::
e61cb19a
JH
118 Reset <branchname> to <startpoint>, even if <branchname> exists
119 already. Without `-f`, 'git branch' refuses to change an existing branch.
8482d042
MM
120 In combination with `-d` (or `--delete`), allow deleting the
121 branch irrespective of its merged status. In combination with
122 `-m` (or `--move`), allow renaming the branch even if the new
52d59cc6 123 branch name already exists, the same applies for `-c` (or `--copy`).
2eaf273d 124
c976d415 125-m::
171edcbb 126--move::
c976d415
LH
127 Move/rename a branch and the corresponding reflog.
128
129-M::
83fe1670 130 Shortcut for `--move --force`.
c976d415 131
52d59cc6
SD
132-c::
133--copy::
134 Copy a branch and the corresponding reflog.
135
136-C::
137 Shortcut for `--copy --force`.
138
73e9da01 139--color[=<when>]::
29b9a66f
MM
140 Color branches to highlight current, local, and
141 remote-tracking branches.
73e9da01 142 The value must be always (the default), never, or auto.
f3673988
BG
143
144--no-color::
145 Turn off branch colors, even when the configuration file gives the
146 default to color output.
73e9da01 147 Same as `--color=never`.
f3673988 148
3bb16a8b
NTND
149-i::
150--ignore-case::
151 Sorting and filtering branches are case insensitive.
152
ebe31ef2
NTND
153--column[=<options>]::
154--no-column::
155 Display branch listing in columns. See configuration variable
1b5b8cf0 156 `column.branch` for option syntax. `--column` and `--no-column`
ebe31ef2
NTND
157 without options are equivalent to 'always' and 'never' respectively.
158+
159This option is only applicable in non-verbose mode.
160
2eaf273d 161-r::
171edcbb 162--remotes::
7dda22e3 163 List or delete (if used with -d) the remote-tracking branches.
1fde99cf 164 Combine with `--list` to match the optional pattern(s).
bfcc9214
AP
165
166-a::
171edcbb 167--all::
bfcc9214 168 List both remote-tracking branches and local branches.
1fde99cf 169 Combine with `--list` to match optional pattern(s).
075dd8ee 170
a15d5981 171-l::
cddd127b 172--list::
75ec4a6c
JH
173 List branches. With optional `<pattern>...`, e.g. `git
174 branch --list 'maint-*'`, list only the branches that match
175 the pattern(s).
cddd127b 176
0ecb1fc7
DU
177--show-current::
178 Print the name of the current branch. In detached HEAD state,
179 nothing is printed.
180
3240240f 181-v::
f0970faa 182-vv::
3240240f 183--verbose::
7b787599
MG
184 When in list mode,
185 show sha1 and commit subject line for each head, along with
2d8a7f0b 186 relationship to upstream branch (if any). If given twice, print
6e938146
NB
187 the path of the linked worktree (if any) and the name of the upstream
188 branch, as well (see also `git remote show <remote>`). Note that the
189 current worktree's HEAD will not have its path printed (it will always
190 be your current directory).
75e6e213 191
d65ddf19
JK
192-q::
193--quiet::
194 Be more quiet when creating or deleting a branch, suppressing
195 non-error messages.
196
cda34e0d
JH
197--abbrev=<n>::
198 In the verbose listing that show the commit object name,
199 show the shortest prefix that is at least '<n>' hexdigits
200 long that uniquely refers the object.
b792c067
NK
201 The default value is 7 and can be overridden by the `core.abbrev`
202 config option.
75e6e213 203
5e00f6fa 204--no-abbrev::
e5ac1217 205 Display the full sha1s in the output listing rather than abbreviating them.
5e00f6fa 206
be427d75 207-t::
84d176ce 208--track::
fef0e991
JH
209 When creating a new branch, set up `branch.<name>.remote` and
210 `branch.<name>.merge` configuration entries to mark the
167d7445
JK
211 start-point branch as "upstream" from the new branch. This
212 configuration will tell git to show the relationship between the
213 two branches in `git status` and `git branch -v`. Furthermore,
214 it directs `git pull` without arguments to pull from the
215 upstream when the new branch is checked out.
216+
29b9a66f 217This behavior is the default when the start point is a remote-tracking branch.
da0005b8 218Set the branch.autoSetupMerge configuration variable to `false` if you
328c6cb8 219want `git switch`, `git checkout` and `git branch` to always behave as if `--no-track`
167d7445 220were given. Set it to `always` if you want this behavior when the
29b9a66f 221start-point is either a local or remote-tracking branch.
84d176ce
FMQ
222
223--no-track::
167d7445 224 Do not set up "upstream" configuration, even if the
da0005b8 225 branch.autoSetupMerge configuration variable is true.
84d176ce 226
4fc50066 227--set-upstream::
52668846
KS
228 As this option had confusing syntax, it is no longer supported.
229 Please use `--track` or `--set-upstream-to` instead.
4fc50066 230
6183d826
CMN
231-u <upstream>::
232--set-upstream-to=<upstream>::
233 Set up <branchname>'s tracking information so <upstream> is
234 considered <branchname>'s upstream branch. If no <branchname>
235 is specified, then it defaults to the current branch.
236
b84869ef
CMN
237--unset-upstream::
238 Remove the upstream information for <branchname>. If no branch
239 is specified it defaults to the current branch.
240
b7200e83
JH
241--edit-description::
242 Open an editor and edit the text to explain what the branch is
561d2b79
PO
243 for, to be used by various other commands (e.g. `format-patch`,
244 `request-pull`, and `merge` (if enabled)). Multi-line explanations
245 may be used.
b7200e83 246
f36ed6db
VR
247--contains [<commit>]::
248 Only list branches which contain the specified commit (HEAD
d0403508 249 if not specified). Implies `--list`.
9a7ea2b1 250
ac3f5a34
ÆAB
251--no-contains [<commit>]::
252 Only list branches which don't contain the specified commit
253 (HEAD if not specified). Implies `--list`.
254
58d2c961
JN
255--merged [<commit>]::
256 Only list branches whose tips are reachable from the
21bf9339 257 specified commit (HEAD if not specified). Implies `--list`.
9a7ea2b1 258
58d2c961
JN
259--no-merged [<commit>]::
260 Only list branches whose tips are not reachable from the
21bf9339 261 specified commit (HEAD if not specified). Implies `--list`.
9a7ea2b1 262
52a22d1e 263<branchname>::
d4072c97 264 The name of the branch to create or delete.
2b1f4247 265 The new branch name must pass all checks defined by
5162e697 266 linkgit:git-check-ref-format[1]. Some of these checks
2b1f4247 267 may restrict the characters allowed in a branch name.
7fc9d69f 268
075dd8ee 269<start-point>::
bb35f35e
JN
270 The new branch head will point to this commit. It may be
271 given as a branch name, a commit-id, or a tag. If this
272 option is omitted, the current HEAD will be used instead.
2eaf273d 273
c976d415
LH
274<oldbranch>::
275 The name of an existing branch to rename.
276
277<newbranch>::
278 The new name for an existing branch. The same restrictions as for
e5ac1217 279 <branchname> apply.
7fc9d69f 280
aedcb7dc
KN
281--sort=<key>::
282 Sort based on the key given. Prefix `-` to sort in descending
283 order of the value. You may use the --sort=<key> option
284 multiple times, in which case the last key becomes the primary
285 key. The keys supported are the same as those in `git
560ae1c1
SM
286 for-each-ref`. Sort order defaults to the value configured for the
287 `branch.sort` variable if exists, or to sorting based on the
aedcb7dc
KN
288 full refname (including `refs/...` prefix). This lists
289 detached HEAD (if present) first, then local branches and
560ae1c1 290 finally remote-tracking branches. See linkgit:git-config[1].
aedcb7dc 291
1e2ccd3a 292
aa3bc55e
KN
293--points-at <object>::
294 Only list branches of the given object.
1e2ccd3a 295
3d9e4ce3 296--format <format>::
e4933cee
MG
297 A string that interpolates `%(fieldname)` from a branch ref being shown
298 and the object it points at. The format is the same as
3d9e4ce3
KN
299 that of linkgit:git-for-each-ref[1].
300
d74b541e
301CONFIGURATION
302-------------
303`pager.branch` is only respected when listing branches, i.e., when
0ae19de7 304`--list` is used or implied. The default is to use a pager.
d74b541e
305See linkgit:git-config[1].
306
76a8788c 307EXAMPLES
2eaf273d 308--------
1e2ccd3a 309
e5ac1217 310Start development from a known tag::
1e2ccd3a
JH
311+
312------------
313$ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
314$ cd my2.6
2eaf273d 315$ git branch my2.6.14 v2.6.14 <1>
328c6cb8 316$ git switch my2.6.14
1e2ccd3a 317------------
2eaf273d
SE
318+
319<1> This step and the next one could be combined into a single step with
ba170517 320 "checkout -b my2.6.14 v2.6.14".
1e2ccd3a 321
e5ac1217 322Delete an unneeded branch::
1e2ccd3a
JH
323+
324------------
325$ git clone git://git.kernel.org/.../git.git my.git
326$ cd my.git
33b1f3d5
FM
327$ git branch -d -r origin/todo origin/html origin/man <1>
328$ git branch -D test <2>
2eaf273d
SE
329------------
330+
e5ac1217 331<1> Delete the remote-tracking branches "todo", "html" and "man". The next
ba170517
JNA
332 'fetch' or 'pull' will create them again unless you configure them not to.
333 See linkgit:git-fetch[1].
e5ac1217 334<2> Delete the "test" branch even if the "master" branch (or whichever branch
ba170517 335 is currently checked out) does not have all commits from the test branch.
2eaf273d 336
1fde99cf
PO
337Listing branches from a specific remote::
338+
339------------
340$ git branch -r -l '<remote>/<pattern>' <1>
341$ git for-each-ref 'refs/remotes/<remote>/<pattern>' <2>
342------------
343+
344<1> Using `-a` would conflate <remote> with any local branches you happen to
345 have been prefixed with the same <remote> pattern.
346<2> `for-each-ref` can take a wide range of options. See linkgit:git-for-each-ref[1]
347
348Patterns will normally need quoting.
2eaf273d 349
76a8788c 350NOTES
2eaf273d
SE
351-----
352
328c6cb8
NTND
353If you are creating a branch that you want to switch to immediately,
354it is easier to use the "git switch" command with its `-c` option to
355do the same thing with a single command.
2eaf273d 356
ac3f5a34
ÆAB
357The options `--contains`, `--no-contains`, `--merged` and `--no-merged`
358serve four related but different purposes:
9a7ea2b1
LH
359
360- `--contains <commit>` is used to find all branches which will need
361 special attention if <commit> were to be rebased or amended, since those
362 branches contain the specified <commit>.
363
ac3f5a34
ÆAB
364- `--no-contains <commit>` is the inverse of that, i.e. branches that don't
365 contain the specified <commit>.
366
9a7ea2b1
LH
367- `--merged` is used to find all branches which can be safely deleted,
368 since those branches are fully contained by HEAD.
369
370- `--no-merged` is used to find branches which are candidates for merging
371 into HEAD, since those branches are not fully contained by HEAD.
1e2ccd3a 372
b59cdffd 373include::ref-reachability-filters.txt[]
415af72b 374
b85e6c5f
NS
375SEE ALSO
376--------
377linkgit:git-check-ref-format[1],
378linkgit:git-fetch[1],
bb35f35e
JN
379linkgit:git-remote[1],
380link:user-manual.html#what-is-a-branch[``Understanding history: What is
381a branch?''] in the Git User's Manual.
b85e6c5f 382
7fc9d69f
JH
383GIT
384---
9e1f0a85 385Part of the linkgit:git[1] suite