git-branch
List, create, or delete branches
TLDR
List local branches. The current branch is highlighted by *
List all branches (local and remote)
Show the name of the current branch
Create new branch based on the current commit
Create new branch based on a specific commit
Rename a branch (must not have it checked out to do this)
Delete a local branch (must not have it checked out to do this)
Delete a remote branch
SYNOPSIS
gitbranch [ --color[=<when>] | --no -color] [ --show -current] [ -v [ --abbrev=<length> | --no -abbrev]] [ --column[=<options>] | --no -column] [ --sort=<key>] [( --merged | --no -merged) [<commit>]] [ --contains [<commit]] [ --no -contains [<commit>]] [ --points -at <object>] [ --format=<format>] [( -r | --remotes) | ( -a | --all)] [ --list] [<pattern> ...] gitbranch [ --track | --no -track] [ -f] <branchname> [<start -point>] gitbranch ( --set -upstream -to=<upstream> | -u <upstream>) [<branchname>] gitbranch --unset -upstream [<branchname>] gitbranch ( -m | -M) [<oldbranch>] <newbranch> gitbranch ( -c | -C) [<oldbranch>] <newbranch> gitbranch ( -d | -D) [ -r] <branchname> ... gitbranch --edit -description [<branchname>]
DESCRIPTION
OPTIONS
-d, --delete Delete a branch . The branch must be fully merged in its upstream branch, or in HEAD if no upstream was set with --track or --set -upstream -to .
-D Shortcut for --delete --force .
--create -reflog Create the branch reflog . This activates recording of all changes made to the branch ref, enabling use of date based sha1 expressions such as "<branchname>@{yesterday}" . Note that in non -bare repositories, reflogs are usually enabled by default by the core.logAllRefUpdates config option . The negated form --no -create -reflog only overrides an earlier --create -reflog ,but currently does not negate the setting of core.logAllRefUpdates .
-f, --force Reset <branchname> to <startpoint>, even if <branchname> exists already . Without -f , gitbranch refuses to change an existing branch . In combination with -d (or --delete ),allow deleting the branch irrespective of its merged status . In combination with -m (or --move ),allow renaming the branch even if the new branch name already exists, the same applies for -c (or --copy ).
-m, --move Move/rename a branch and the corresponding reflog .
-M Shortcut for --move --force .
-c, --copy Copy a branch and the corresponding reflog .
-C Shortcut for --copy --force .
--color[=<when>] Color branches to highlight current, local, and remote -tracking branches . The value must be always (the default), never, or auto .
--no -color Turn off branch colors, even when the configuration file gives the default to color output . Same as --color=never .
-i, --ignore -case Sorting and filtering branches are case insensitive .
--column[=<options>], --no -column Display branch listing in columns . See configuration variable column .branch for option syntax . --column and --no -column without options are equivalent to always and never respectively .
-r, --remotes List or delete (if used with -d) the remote -tracking branches . Combine with --list to match the optional pattern(s) .
-a, --all List both remote -tracking branches and local branches . Combine with --list to match optional pattern(s) .
-l, --list List branches . With optional <pattern>. . . ,e .g . gitbranch --list (Aqmaint -* (Aq ,list only the branches that match the pattern(s) .
--show -current Print the name of the current branch . In detached HEAD state, nothing is printed .
-v, -vv, --verbose When in list mode, show sha1 and commit subject line for each head, along with relationship to upstream branch (if any) . If given twice, print the path of the linked worktree (if any) and the name of the upstream branch, as well (see also gitremote show <remote> ). Note that the current worktree HEAD will not have its path printed (it will always be your current directory) .
-q, --quiet Be more quiet when creating or deleting a branch, suppressing non -error messages .
--abbrev=<length> Alter the sha1 minimum display length in the output listing . The default value is 7 and can be overridden by the core.abbrev config option .
--no -abbrev Display the full sha1s in the output listing rather than abbreviating them .
-t, --track When creating a new branch, set up branch.<name> .remote and branch.<name> .merge configuration entries to mark the start -point branch as "upstream" from the new branch . This configuration will tell git to show the relationship between the two branches in gitstatus and gitbranch -v . Furthermore, it directs gitpull without arguments to pull from the upstream when the new branch is checked out . This behavior is the default when the start point is a remote -tracking branch . Set the branch .autoSetupMerge configuration variable to false if you want gitswitch , gitcheckout and gitbranch to always behave as if --no -track were given . Set it to always if you want this behavior when the start -point is either a local or remote -tracking branch .
--no -track Do not set up "upstream" configuration, even if the branch .autoSetupMerge configuration variable is true .
--set -upstream As this option had confusing syntax, it is no longer supported . Please use --track or --set -upstream -to instead .
-u <upstream>, --set -upstream -to=<upstream> Set up <branchname> (Aqs tracking information so <upstream> is considered <branchname> (Aqs upstream branch . If no <branchname> is specified, then it defaults to the current branch .
--unset -upstream Remove the upstream information for <branchname> . If no branch is specified it defaults to the current branch .
--edit -description Open an editor and edit the text to explain what the branch is for, to be used by various other commands (e .g . format-patch , request-pull ,and merge (if enabled)) . Multi -line explanations may be used .
--contains [<commit>] Only list branches which contain the specified commit (HEAD if not specified) . Implies --list .
--no -contains [<commit>] Only list branches which don contain the specified commit (HEAD if not specified) . Implies --list .
--merged [<commit>] Only list branches whose tips are reachable from the specified commit (HEAD if not specified) . Implies --list ,incompatible with --no -merged .
--no -merged [<commit>] Only list branches whose tips are not reachable from the specified commit (HEAD if not specified) . Implies --list ,incompatible with --merged .
<branchname> The name of the branch to create or delete . The new branch name must pass all checks defined by git-check-ref-format (1). Some of these checks may restrict the characters allowed in a branch name .
<start -point> The new branch head will point to this commit . It may be given as a branch name, a commit -id, or a tag . If this option is omitted, the current HEAD will be used instead .
<oldbranch> The name of an existing branch to rename .
<newbranch> The new name for an existing branch . The same restrictions as for <branchname> apply .
--sort=<key> Sort based on the key given . Prefix - to sort in descending order of the value . You may use the --sort=<key> option multiple times, in which case the last key becomes the primary key . The keys supported are the same as those in gitfor -each -ref . Sort order defaults to the value configured for the branch.sort variable if exists, or to sorting based on the full refname (including refs/. . . prefix) . This lists detached HEAD (if present) first, then local branches and finally remote -tracking branches . See git-config (1).
--points -at <object> Only list branches of the given object .
--format <format> A string that interpolates %(fieldname) from a branch ref being shown and the object it points at . The format is the same as that of git-for-each-ref (1).
CONFIGURATION
EXAMPLES
Start development from a known tag
.RS 4$ git clone git://git .kernel .org/pub/scm/ . . ./linux -2 .6 my2 .6 $ cd my2 .6 $ git branch my2 .6 .14 v2 .6 .14 (1) $ git switch my2 .6 .14 .RE 1. Thisstep and the next one could be combined into a single step with "checkout -b my2 .6 .14 v2 .6 .14" .
Delete an unneeded branch .RS 4
$ git clone git://git .kernel .org/ . . ./git .git my .git $ cd my .git $ git branch -d -r origin/todo origin/html origin/man (1) $ git branch -D test (2) .RE 1. Deletethe remote -tracking branches "todo", "html" and "man" . The next fetch or pull will create them again unless you configure them not to . See git-fetch (1).
2. Deletethe "test" branch even if the "master" branch (or whichever branch is currently checked out) does not have all commits from the test branch .
Listing branches from a specific remote .RS 4
$ git branch -r -l (Aq<remote>/<pattern> (Aq (1) $ git for -each -ref (Aqrefs/remotes/<remote>/<pattern> (Aq (2) .RE 1. Using -a would conflate <remote> with any local branches you happen to have been prefixed with the same <remote> pattern .
2. for-each -ref can take a wide range of options . See git-for-each-ref (1)
Patterns will normally need quoting .
NOTES
2.3 --contains <commit> is used to find all branches which will need special attention if <commit> were to be rebased or amended, since those branches contain the specified <commit> . '-04' '+03' .sp -1
2.3 --no -contains <commit> is the inverse of that, i .e . branches that don contain the specified <commit> . '-04' '+03' .sp -1
2.3 --merged is used to find all branches which can be safely deleted, since those branches are fully contained by HEAD . '-04' '+03' .sp -1
2.3 --no -merged is used to find branches which are candidates for merging into HEAD, since those branches are not fully contained by HEAD .
GIT
NOTES
" 1." 4 history: What is a branch? file:///usr/share/doc/git-doc/user-manual.html#what-is-a-branch
SEE ALSO
git-check-ref-format(1), git-fetch(1), git-remote(1), history: What is a branch? [1] in the Git User Manual .