]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-branch.txt
t4034: abstract away SHA-1-specific constants
[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]
1fde99cf 12 [-v [--abbrev=<length> | --no-abbrev]]
783b8292 13 [--column[=<options>] | --no-column] [--sort=<key>]
ac3f5a34 14 [(--merged | --no-merged) [<commit>]]
783b8292 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
SD
80The `-c` and `-C` options have the exact same semantics as `-m` and
81`-M`, except instead of the branch being renamed it along with its
82config and reflog will be copied to a new name.
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
156 column.branch for option syntax.`--column` and `--no-column`
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
75e6e213 197--abbrev=<length>::
e5ac1217 198 Alter the sha1's minimum display length in the output listing.
b792c067
NK
199 The default value is 7 and can be overridden by the `core.abbrev`
200 config option.
75e6e213 201
5e00f6fa 202--no-abbrev::
e5ac1217 203 Display the full sha1s in the output listing rather than abbreviating them.
5e00f6fa 204
be427d75 205-t::
84d176ce 206--track::
fef0e991
JH
207 When creating a new branch, set up `branch.<name>.remote` and
208 `branch.<name>.merge` configuration entries to mark the
167d7445
JK
209 start-point branch as "upstream" from the new branch. This
210 configuration will tell git to show the relationship between the
211 two branches in `git status` and `git branch -v`. Furthermore,
212 it directs `git pull` without arguments to pull from the
213 upstream when the new branch is checked out.
214+
29b9a66f 215This behavior is the default when the start point is a remote-tracking branch.
da0005b8 216Set the branch.autoSetupMerge configuration variable to `false` if you
328c6cb8 217want `git switch`, `git checkout` and `git branch` to always behave as if `--no-track`
167d7445 218were given. Set it to `always` if you want this behavior when the
29b9a66f 219start-point is either a local or remote-tracking branch.
84d176ce
FMQ
220
221--no-track::
167d7445 222 Do not set up "upstream" configuration, even if the
da0005b8 223 branch.autoSetupMerge configuration variable is true.
84d176ce 224
4fc50066 225--set-upstream::
52668846
KS
226 As this option had confusing syntax, it is no longer supported.
227 Please use `--track` or `--set-upstream-to` instead.
4fc50066 228
6183d826
CMN
229-u <upstream>::
230--set-upstream-to=<upstream>::
231 Set up <branchname>'s tracking information so <upstream> is
232 considered <branchname>'s upstream branch. If no <branchname>
233 is specified, then it defaults to the current branch.
234
b84869ef
CMN
235--unset-upstream::
236 Remove the upstream information for <branchname>. If no branch
237 is specified it defaults to the current branch.
238
b7200e83
JH
239--edit-description::
240 Open an editor and edit the text to explain what the branch is
561d2b79
PO
241 for, to be used by various other commands (e.g. `format-patch`,
242 `request-pull`, and `merge` (if enabled)). Multi-line explanations
243 may be used.
b7200e83 244
f36ed6db
VR
245--contains [<commit>]::
246 Only list branches which contain the specified commit (HEAD
d0403508 247 if not specified). Implies `--list`.
9a7ea2b1 248
ac3f5a34
ÆAB
249--no-contains [<commit>]::
250 Only list branches which don't contain the specified commit
251 (HEAD if not specified). Implies `--list`.
252
58d2c961
JN
253--merged [<commit>]::
254 Only list branches whose tips are reachable from the
17d6c744
ÆAB
255 specified commit (HEAD if not specified). Implies `--list`,
256 incompatible with `--no-merged`.
9a7ea2b1 257
58d2c961
JN
258--no-merged [<commit>]::
259 Only list branches whose tips are not reachable from the
17d6c744
ÆAB
260 specified commit (HEAD if not specified). Implies `--list`,
261 incompatible with `--merged`.
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
b85e6c5f
NS
373SEE ALSO
374--------
375linkgit:git-check-ref-format[1],
376linkgit:git-fetch[1],
bb35f35e
JN
377linkgit:git-remote[1],
378link:user-manual.html#what-is-a-branch[``Understanding history: What is
379a branch?''] in the Git User's Manual.
b85e6c5f 380
7fc9d69f
JH
381GIT
382---
9e1f0a85 383Part of the linkgit:git[1] suite