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