]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-branch.txt
branch: add flags and config to inherit tracking
[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>...]
d3115660 19'git branch' [--track [direct|inherit] | --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 120 In combination with `-d` (or `--delete`), allow deleting the
597a9774
RS
121 branch irrespective of its merged status, or whether it even
122 points to a valid commit. In combination with
8482d042 123 `-m` (or `--move`), allow renaming the branch even if the new
52d59cc6 124 branch name already exists, the same applies for `-c` (or `--copy`).
2eaf273d 125
c976d415 126-m::
171edcbb 127--move::
c976d415
LH
128 Move/rename a branch and the corresponding reflog.
129
130-M::
83fe1670 131 Shortcut for `--move --force`.
c976d415 132
52d59cc6
SD
133-c::
134--copy::
135 Copy a branch and the corresponding reflog.
136
137-C::
138 Shortcut for `--copy --force`.
139
73e9da01 140--color[=<when>]::
29b9a66f
MM
141 Color branches to highlight current, local, and
142 remote-tracking branches.
73e9da01 143 The value must be always (the default), never, or auto.
f3673988
BG
144
145--no-color::
146 Turn off branch colors, even when the configuration file gives the
147 default to color output.
73e9da01 148 Same as `--color=never`.
f3673988 149
3bb16a8b
NTND
150-i::
151--ignore-case::
152 Sorting and filtering branches are case insensitive.
153
ebe31ef2
NTND
154--column[=<options>]::
155--no-column::
156 Display branch listing in columns. See configuration variable
1b5b8cf0 157 `column.branch` for option syntax. `--column` and `--no-column`
ebe31ef2
NTND
158 without options are equivalent to 'always' and 'never' respectively.
159+
160This option is only applicable in non-verbose mode.
161
2eaf273d 162-r::
171edcbb 163--remotes::
7dda22e3 164 List or delete (if used with -d) the remote-tracking branches.
1fde99cf 165 Combine with `--list` to match the optional pattern(s).
bfcc9214
AP
166
167-a::
171edcbb 168--all::
bfcc9214 169 List both remote-tracking branches and local branches.
1fde99cf 170 Combine with `--list` to match optional pattern(s).
075dd8ee 171
a15d5981 172-l::
cddd127b 173--list::
75ec4a6c
JH
174 List branches. With optional `<pattern>...`, e.g. `git
175 branch --list 'maint-*'`, list only the branches that match
176 the pattern(s).
cddd127b 177
0ecb1fc7
DU
178--show-current::
179 Print the name of the current branch. In detached HEAD state,
180 nothing is printed.
181
3240240f 182-v::
f0970faa 183-vv::
3240240f 184--verbose::
7b787599
MG
185 When in list mode,
186 show sha1 and commit subject line for each head, along with
2d8a7f0b 187 relationship to upstream branch (if any). If given twice, print
6e938146
NB
188 the path of the linked worktree (if any) and the name of the upstream
189 branch, as well (see also `git remote show <remote>`). Note that the
190 current worktree's HEAD will not have its path printed (it will always
191 be your current directory).
75e6e213 192
d65ddf19
JK
193-q::
194--quiet::
195 Be more quiet when creating or deleting a branch, suppressing
196 non-error messages.
197
cda34e0d
JH
198--abbrev=<n>::
199 In the verbose listing that show the commit object name,
200 show the shortest prefix that is at least '<n>' hexdigits
201 long that uniquely refers the object.
b792c067
NK
202 The default value is 7 and can be overridden by the `core.abbrev`
203 config option.
75e6e213 204
5e00f6fa 205--no-abbrev::
e5ac1217 206 Display the full sha1s in the output listing rather than abbreviating them.
5e00f6fa 207
be427d75 208-t::
d3115660 209--track [inherit|direct]::
fef0e991 210 When creating a new branch, set up `branch.<name>.remote` and
d3115660
JS
211 `branch.<name>.merge` configuration entries to set "upstream" tracking
212 configuration for the new branch. This
167d7445
JK
213 configuration will tell git to show the relationship between the
214 two branches in `git status` and `git branch -v`. Furthermore,
215 it directs `git pull` without arguments to pull from the
216 upstream when the new branch is checked out.
217+
d3115660
JS
218The exact upstream branch is chosen depending on the optional argument:
219`--track` or `--track direct` means to use the start-point branch itself as the
220upstream; `--track inherit` means to copy the upstream configuration of the
221start-point branch.
222+
223`--track direct` is the default when the start point is a remote-tracking branch.
da0005b8 224Set the branch.autoSetupMerge configuration variable to `false` if you
328c6cb8 225want `git switch`, `git checkout` and `git branch` to always behave as if `--no-track`
167d7445 226were given. Set it to `always` if you want this behavior when the
d3115660
JS
227start-point is either a local or remote-tracking branch. Set it to
228`inherit` if you want to copy the tracking configuration from the
229branch point.
230+
231See linkgit:git-pull[1] and linkgit:git-config[1] for additional discussion on
232how the `branch.<name>.remote` and `branch.<name>.merge` options are used.
84d176ce
FMQ
233
234--no-track::
167d7445 235 Do not set up "upstream" configuration, even if the
d3115660 236 branch.autoSetupMerge configuration variable is set.
84d176ce 237
4fc50066 238--set-upstream::
52668846
KS
239 As this option had confusing syntax, it is no longer supported.
240 Please use `--track` or `--set-upstream-to` instead.
4fc50066 241
6183d826
CMN
242-u <upstream>::
243--set-upstream-to=<upstream>::
244 Set up <branchname>'s tracking information so <upstream> is
245 considered <branchname>'s upstream branch. If no <branchname>
246 is specified, then it defaults to the current branch.
247
b84869ef
CMN
248--unset-upstream::
249 Remove the upstream information for <branchname>. If no branch
250 is specified it defaults to the current branch.
251
b7200e83
JH
252--edit-description::
253 Open an editor and edit the text to explain what the branch is
561d2b79
PO
254 for, to be used by various other commands (e.g. `format-patch`,
255 `request-pull`, and `merge` (if enabled)). Multi-line explanations
256 may be used.
b7200e83 257
f36ed6db
VR
258--contains [<commit>]::
259 Only list branches which contain the specified commit (HEAD
d0403508 260 if not specified). Implies `--list`.
9a7ea2b1 261
ac3f5a34
ÆAB
262--no-contains [<commit>]::
263 Only list branches which don't contain the specified commit
264 (HEAD if not specified). Implies `--list`.
265
58d2c961
JN
266--merged [<commit>]::
267 Only list branches whose tips are reachable from the
21bf9339 268 specified commit (HEAD if not specified). Implies `--list`.
9a7ea2b1 269
58d2c961
JN
270--no-merged [<commit>]::
271 Only list branches whose tips are not reachable from the
21bf9339 272 specified commit (HEAD if not specified). Implies `--list`.
9a7ea2b1 273
52a22d1e 274<branchname>::
d4072c97 275 The name of the branch to create or delete.
2b1f4247 276 The new branch name must pass all checks defined by
5162e697 277 linkgit:git-check-ref-format[1]. Some of these checks
2b1f4247 278 may restrict the characters allowed in a branch name.
7fc9d69f 279
075dd8ee 280<start-point>::
bb35f35e
JN
281 The new branch head will point to this commit. It may be
282 given as a branch name, a commit-id, or a tag. If this
283 option is omitted, the current HEAD will be used instead.
2eaf273d 284
c976d415
LH
285<oldbranch>::
286 The name of an existing branch to rename.
287
288<newbranch>::
289 The new name for an existing branch. The same restrictions as for
e5ac1217 290 <branchname> apply.
7fc9d69f 291
aedcb7dc
KN
292--sort=<key>::
293 Sort based on the key given. Prefix `-` to sort in descending
294 order of the value. You may use the --sort=<key> option
295 multiple times, in which case the last key becomes the primary
296 key. The keys supported are the same as those in `git
560ae1c1
SM
297 for-each-ref`. Sort order defaults to the value configured for the
298 `branch.sort` variable if exists, or to sorting based on the
aedcb7dc
KN
299 full refname (including `refs/...` prefix). This lists
300 detached HEAD (if present) first, then local branches and
560ae1c1 301 finally remote-tracking branches. See linkgit:git-config[1].
aedcb7dc 302
1e2ccd3a 303
aa3bc55e
KN
304--points-at <object>::
305 Only list branches of the given object.
1e2ccd3a 306
3d9e4ce3 307--format <format>::
e4933cee
MG
308 A string that interpolates `%(fieldname)` from a branch ref being shown
309 and the object it points at. The format is the same as
3d9e4ce3
KN
310 that of linkgit:git-for-each-ref[1].
311
d74b541e
312CONFIGURATION
313-------------
314`pager.branch` is only respected when listing branches, i.e., when
0ae19de7 315`--list` is used or implied. The default is to use a pager.
d74b541e
316See linkgit:git-config[1].
317
76a8788c 318EXAMPLES
2eaf273d 319--------
1e2ccd3a 320
e5ac1217 321Start development from a known tag::
1e2ccd3a
JH
322+
323------------
324$ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6
325$ cd my2.6
2eaf273d 326$ git branch my2.6.14 v2.6.14 <1>
328c6cb8 327$ git switch my2.6.14
1e2ccd3a 328------------
2eaf273d
SE
329+
330<1> This step and the next one could be combined into a single step with
ba170517 331 "checkout -b my2.6.14 v2.6.14".
1e2ccd3a 332
e5ac1217 333Delete an unneeded branch::
1e2ccd3a
JH
334+
335------------
336$ git clone git://git.kernel.org/.../git.git my.git
337$ cd my.git
33b1f3d5
FM
338$ git branch -d -r origin/todo origin/html origin/man <1>
339$ git branch -D test <2>
2eaf273d
SE
340------------
341+
e5ac1217 342<1> Delete the remote-tracking branches "todo", "html" and "man". The next
ba170517
JNA
343 'fetch' or 'pull' will create them again unless you configure them not to.
344 See linkgit:git-fetch[1].
e5ac1217 345<2> Delete the "test" branch even if the "master" branch (or whichever branch
ba170517 346 is currently checked out) does not have all commits from the test branch.
2eaf273d 347
1fde99cf
PO
348Listing branches from a specific remote::
349+
350------------
351$ git branch -r -l '<remote>/<pattern>' <1>
352$ git for-each-ref 'refs/remotes/<remote>/<pattern>' <2>
353------------
354+
355<1> Using `-a` would conflate <remote> with any local branches you happen to
356 have been prefixed with the same <remote> pattern.
357<2> `for-each-ref` can take a wide range of options. See linkgit:git-for-each-ref[1]
358
359Patterns will normally need quoting.
2eaf273d 360
76a8788c 361NOTES
2eaf273d
SE
362-----
363
328c6cb8
NTND
364If you are creating a branch that you want to switch to immediately,
365it is easier to use the "git switch" command with its `-c` option to
366do the same thing with a single command.
2eaf273d 367
ac3f5a34
ÆAB
368The options `--contains`, `--no-contains`, `--merged` and `--no-merged`
369serve four related but different purposes:
9a7ea2b1
LH
370
371- `--contains <commit>` is used to find all branches which will need
372 special attention if <commit> were to be rebased or amended, since those
373 branches contain the specified <commit>.
374
ac3f5a34
ÆAB
375- `--no-contains <commit>` is the inverse of that, i.e. branches that don't
376 contain the specified <commit>.
377
9a7ea2b1
LH
378- `--merged` is used to find all branches which can be safely deleted,
379 since those branches are fully contained by HEAD.
380
381- `--no-merged` is used to find branches which are candidates for merging
382 into HEAD, since those branches are not fully contained by HEAD.
1e2ccd3a 383
b59cdffd 384include::ref-reachability-filters.txt[]
415af72b 385
b85e6c5f
NS
386SEE ALSO
387--------
388linkgit:git-check-ref-format[1],
389linkgit:git-fetch[1],
bb35f35e
JN
390linkgit:git-remote[1],
391link:user-manual.html#what-is-a-branch[``Understanding history: What is
392a branch?''] in the Git User's Manual.
b85e6c5f 393
7fc9d69f
JH
394GIT
395---
9e1f0a85 396Part of the linkgit:git[1] suite