Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 1 | git-branch(1) |
| 2 | ============= |
| 3 | |
| 4 | NAME |
| 5 | ---- |
Junio C Hamano | 7c73c66 | 2007-01-19 00:37:50 | [diff] [blame] | 6 | git-branch - List, create, or delete branches |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 7 | |
| 8 | SYNOPSIS |
| 9 | -------- |
Junio C Hamano | 2b13527 | 2006-03-18 07:45:42 | [diff] [blame] | 10 | [verse] |
Junio C Hamano | 38ddcce | 2008-07-15 15:49:03 | [diff] [blame] | 11 | 'git branch' [--color | --no-color] [-r | -a] |
| 12 | [-v [--abbrev=<length> | --no-abbrev]] |
| 13 | [(--merged | --no-merged | --contains) [<commit>]] |
Junio C Hamano | fce7c7e | 2008-07-02 03:06:38 | [diff] [blame] | 14 | 'git branch' [--track | --no-track] [-l] [-f] <branchname> [<start-point>] |
| 15 | 'git branch' (-m | -M) [<oldbranch>] <newbranch> |
| 16 | 'git branch' (-d | -D) [-r] <branchname>... |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 17 | |
| 18 | DESCRIPTION |
| 19 | ----------- |
Junio C Hamano | 38ddcce | 2008-07-15 15:49:03 | [diff] [blame] | 20 | |
Junio C Hamano | fd83b8e | 2009-03-22 08:21:41 | [diff] [blame] | 21 | With no arguments, existing branches are listed and the current branch will |
Junio C Hamano | 38ddcce | 2008-07-15 15:49:03 | [diff] [blame] | 22 | be highlighted with an asterisk. Option `-r` causes the remote-tracking |
| 23 | branches to be listed, and option `-a` shows both. |
| 24 | |
Junio C Hamano | fd83b8e | 2009-03-22 08:21:41 | [diff] [blame] | 25 | With `--contains`, shows only the branches that contain the named commit |
| 26 | (in other words, the branches whose tip commits are descendants of the |
Junio C Hamano | 38ddcce | 2008-07-15 15:49:03 | [diff] [blame] | 27 | named commit). With `--merged`, only branches merged into the named |
| 28 | commit (i.e. the branches whose tip commits are reachable from the named |
| 29 | commit) will be listed. With `--no-merged` only branches not merged into |
Junio C Hamano | fd83b8e | 2009-03-22 08:21:41 | [diff] [blame] | 30 | the named commit will be listed. If the <commit> argument is missing it |
| 31 | defaults to 'HEAD' (i.e. the tip of the current branch). |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 32 | |
Junio C Hamano | fd83b8e | 2009-03-22 08:21:41 | [diff] [blame] | 33 | In the command's second form, a new branch named <branchname> will be created. |
Junio C Hamano | c8d88c2 | 2006-04-29 07:02:01 | [diff] [blame] | 34 | It will start out with a head equal to the one given as <start-point>. |
| 35 | If no <start-point> is given, the branch will be created with a head |
| 36 | equal to that of the currently checked out branch. |
| 37 | |
Junio C Hamano | 1b50ce9 | 2007-10-03 12:05:53 | [diff] [blame] | 38 | Note that this will create the new branch, but it will not switch the |
| 39 | working tree to it; use "git checkout <newbranch>" to switch to the |
| 40 | new branch. |
| 41 | |
Junio C Hamano | 9c33415 | 2008-02-12 03:18:52 | [diff] [blame] | 42 | When a local branch is started off a remote branch, git sets up the |
Junio C Hamano | ba4b928 | 2008-07-06 05:20:31 | [diff] [blame] | 43 | branch so that 'git-pull' will appropriately merge from |
Junio C Hamano | 24bc09a | 2008-02-28 00:27:44 | [diff] [blame] | 44 | the remote branch. This behavior may be changed via the global |
| 45 | `branch.autosetupmerge` configuration flag. That setting can be |
| 46 | overridden by using the `--track` and `--no-track` options. |
Junio C Hamano | 103ad7f | 2007-03-14 11:19:26 | [diff] [blame] | 47 | |
Junio C Hamano | e7935c4 | 2006-12-13 21:32:17 | [diff] [blame] | 48 | With a '-m' or '-M' option, <oldbranch> will be renamed to <newbranch>. |
| 49 | If <oldbranch> had a corresponding reflog, it is renamed to match |
| 50 | <newbranch>, and a reflog entry is created to remember the branch |
| 51 | renaming. If <newbranch> exists, -M must be used to force the rename |
| 52 | to happen. |
| 53 | |
Junio C Hamano | c8d88c2 | 2006-04-29 07:02:01 | [diff] [blame] | 54 | With a `-d` or `-D` option, `<branchname>` will be deleted. You may |
Junio C Hamano | 341071d | 2006-06-04 07:24:48 | [diff] [blame] | 55 | specify more than one branch for deletion. If the branch currently |
Junio C Hamano | 258e441 | 2007-11-29 02:28:32 | [diff] [blame] | 56 | has a reflog then the reflog will also be deleted. |
| 57 | |
| 58 | Use -r together with -d to delete remote-tracking branches. Note, that it |
| 59 | only makes sense to delete remote-tracking branches if they no longer exist |
Junio C Hamano | fd83b8e | 2009-03-22 08:21:41 | [diff] [blame] | 60 | in the remote repository or if 'git-fetch' was configured not to fetch |
| 61 | them again. See also the 'prune' subcommand of linkgit:git-remote[1] for a |
| 62 | way to clean up all obsolete remote-tracking branches. |
Junio C Hamano | 2b13527 | 2006-03-18 07:45:42 | [diff] [blame] | 63 | |
| 64 | |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 65 | OPTIONS |
| 66 | ------- |
| 67 | -d:: |
Junio C Hamano | 258e441 | 2007-11-29 02:28:32 | [diff] [blame] | 68 | Delete a branch. The branch must be fully merged in HEAD. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 69 | |
| 70 | -D:: |
Junio C Hamano | 258e441 | 2007-11-29 02:28:32 | [diff] [blame] | 71 | Delete a branch irrespective of its merged status. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 72 | |
Junio C Hamano | 341071d | 2006-06-04 07:24:48 | [diff] [blame] | 73 | -l:: |
Junio C Hamano | 1d90cb0 | 2007-07-03 07:05:31 | [diff] [blame] | 74 | Create the branch's reflog. This activates recording of |
| 75 | all changes made to the branch ref, enabling use of date |
| 76 | based sha1 expressions such as "<branchname>@\{yesterday}". |
Junio C Hamano | 341071d | 2006-06-04 07:24:48 | [diff] [blame] | 77 | |
Junio C Hamano | 560a1f6 | 2006-01-30 04:19:57 | [diff] [blame] | 78 | -f:: |
Junio C Hamano | ea82cff | 2009-03-18 01:54:48 | [diff] [blame] | 79 | Reset <branchname> to <startpoint> if <branchname> exists |
| 80 | already. Without `-f` 'git-branch' refuses to change an existing branch. |
Junio C Hamano | c8d88c2 | 2006-04-29 07:02:01 | [diff] [blame] | 81 | |
Junio C Hamano | e7935c4 | 2006-12-13 21:32:17 | [diff] [blame] | 82 | -m:: |
| 83 | Move/rename a branch and the corresponding reflog. |
| 84 | |
| 85 | -M:: |
Junio C Hamano | fd83b8e | 2009-03-22 08:21:41 | [diff] [blame] | 86 | Move/rename a branch even if the new branch name already exists. |
Junio C Hamano | e7935c4 | 2006-12-13 21:32:17 | [diff] [blame] | 87 | |
Junio C Hamano | eb69295 | 2007-01-03 22:02:12 | [diff] [blame] | 88 | --color:: |
| 89 | Color branches to highlight current, local, and remote branches. |
| 90 | |
| 91 | --no-color:: |
| 92 | Turn off branch colors, even when the configuration file gives the |
| 93 | default to color output. |
| 94 | |
Junio C Hamano | c8d88c2 | 2006-04-29 07:02:01 | [diff] [blame] | 95 | -r:: |
Junio C Hamano | 63ef0ac | 2006-12-22 07:28:18 | [diff] [blame] | 96 | List or delete (if used with -d) the remote-tracking branches. |
Junio C Hamano | fe9acab | 2006-11-24 12:10:55 | [diff] [blame] | 97 | |
| 98 | -a:: |
| 99 | List both remote-tracking branches and local branches. |
Junio C Hamano | 560a1f6 | 2006-01-30 04:19:57 | [diff] [blame] | 100 | |
Junio C Hamano | eb41599 | 2008-06-08 22:49:47 | [diff] [blame] | 101 | -v:: |
| 102 | --verbose:: |
Junio C Hamano | 98e32c3 | 2009-04-13 02:39:53 | [diff] [blame] | 103 | Show sha1 and commit subject line for each head, along with |
| 104 | relationship to upstream branch (if any). If given twice, print |
| 105 | the name of the upstream branch, as well. |
Junio C Hamano | 53edd07 | 2006-11-25 10:05:21 | [diff] [blame] | 106 | |
| 107 | --abbrev=<length>:: |
Junio C Hamano | fd83b8e | 2009-03-22 08:21:41 | [diff] [blame] | 108 | Alter the sha1's minimum display length in the output listing. |
| 109 | The default value is 7. |
Junio C Hamano | 53edd07 | 2006-11-25 10:05:21 | [diff] [blame] | 110 | |
Junio C Hamano | a3fccdf | 2007-03-03 05:18:26 | [diff] [blame] | 111 | --no-abbrev:: |
Junio C Hamano | fd83b8e | 2009-03-22 08:21:41 | [diff] [blame] | 112 | Display the full sha1s in the output listing rather than abbreviating them. |
Junio C Hamano | a3fccdf | 2007-03-03 05:18:26 | [diff] [blame] | 113 | |
Junio C Hamano | 89bdb3b | 2009-05-10 06:48:14 | [diff] [blame] | 114 | -t:: |
Junio C Hamano | 1b50ce9 | 2007-10-03 12:05:53 | [diff] [blame] | 115 | --track:: |
Junio C Hamano | 3bd66e9 | 2009-04-18 06:17:56 | [diff] [blame] | 116 | When creating a new branch, set up configuration to mark the |
| 117 | start-point branch as "upstream" from the new branch. This |
| 118 | configuration will tell git to show the relationship between the |
| 119 | two branches in `git status` and `git branch -v`. Furthermore, |
| 120 | it directs `git pull` without arguments to pull from the |
| 121 | upstream when the new branch is checked out. |
| 122 | + |
| 123 | This behavior is the default when the start point is a remote branch. |
| 124 | Set the branch.autosetupmerge configuration variable to `false` if you |
| 125 | want `git checkout` and `git branch` to always behave as if '--no-track' |
| 126 | were given. Set it to `always` if you want this behavior when the |
| 127 | start-point is either a local or remote branch. |
Junio C Hamano | 1b50ce9 | 2007-10-03 12:05:53 | [diff] [blame] | 128 | |
| 129 | --no-track:: |
Junio C Hamano | 3bd66e9 | 2009-04-18 06:17:56 | [diff] [blame] | 130 | Do not set up "upstream" configuration, even if the |
| 131 | branch.autosetupmerge configuration variable is true. |
Junio C Hamano | 1b50ce9 | 2007-10-03 12:05:53 | [diff] [blame] | 132 | |
Junio C Hamano | 47d68a5 | 2008-05-06 06:35:40 | [diff] [blame] | 133 | --contains <commit>:: |
| 134 | Only list branches which contain the specified commit. |
| 135 | |
| 136 | --merged:: |
| 137 | Only list branches which are fully contained by HEAD. |
| 138 | |
| 139 | --no-merged:: |
| 140 | Do not list branches which are fully contained by HEAD. |
| 141 | |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 142 | <branchname>:: |
| 143 | The name of the branch to create or delete. |
Junio C Hamano | b2f5edd | 2006-05-21 10:50:09 | [diff] [blame] | 144 | The new branch name must pass all checks defined by |
Junio C Hamano | 35738e8 | 2008-01-07 07:55:46 | [diff] [blame] | 145 | linkgit:git-check-ref-format[1]. Some of these checks |
Junio C Hamano | b2f5edd | 2006-05-21 10:50:09 | [diff] [blame] | 146 | may restrict the characters allowed in a branch name. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 147 | |
Junio C Hamano | 560a1f6 | 2006-01-30 04:19:57 | [diff] [blame] | 148 | <start-point>:: |
Junio C Hamano | c8d88c2 | 2006-04-29 07:02:01 | [diff] [blame] | 149 | The new branch will be created with a HEAD equal to this. It may |
| 150 | be given as a branch name, a commit-id, or a tag. If this option |
| 151 | is omitted, the current branch is assumed. |
| 152 | |
Junio C Hamano | e7935c4 | 2006-12-13 21:32:17 | [diff] [blame] | 153 | <oldbranch>:: |
| 154 | The name of an existing branch to rename. |
| 155 | |
| 156 | <newbranch>:: |
| 157 | The new name for an existing branch. The same restrictions as for |
Junio C Hamano | fd83b8e | 2009-03-22 08:21:41 | [diff] [blame] | 158 | <branchname> apply. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 159 | |
| 160 | |
| 161 | Examples |
Junio C Hamano | c8d88c2 | 2006-04-29 07:02:01 | [diff] [blame] | 162 | -------- |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 163 | |
Junio C Hamano | fd83b8e | 2009-03-22 08:21:41 | [diff] [blame] | 164 | Start development from a known tag:: |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 165 | + |
| 166 | ------------ |
| 167 | $ git clone git://git.kernel.org/pub/scm/.../linux-2.6 my2.6 |
| 168 | $ cd my2.6 |
Junio C Hamano | c8d88c2 | 2006-04-29 07:02:01 | [diff] [blame] | 169 | $ git branch my2.6.14 v2.6.14 <1> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 170 | $ git checkout my2.6.14 |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 171 | ------------ |
Junio C Hamano | c8d88c2 | 2006-04-29 07:02:01 | [diff] [blame] | 172 | + |
| 173 | <1> This step and the next one could be combined into a single step with |
| 174 | "checkout -b my2.6.14 v2.6.14". |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 175 | |
Junio C Hamano | fd83b8e | 2009-03-22 08:21:41 | [diff] [blame] | 176 | Delete an unneeded branch:: |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 177 | + |
| 178 | ------------ |
| 179 | $ git clone git://git.kernel.org/.../git.git my.git |
| 180 | $ cd my.git |
Junio C Hamano | 18b6ff3 | 2007-07-17 10:40:26 | [diff] [blame] | 181 | $ git branch -d -r origin/todo origin/html origin/man <1> |
| 182 | $ git branch -D test <2> |
Junio C Hamano | c8d88c2 | 2006-04-29 07:02:01 | [diff] [blame] | 183 | ------------ |
| 184 | + |
Junio C Hamano | fd83b8e | 2009-03-22 08:21:41 | [diff] [blame] | 185 | <1> Delete the remote-tracking branches "todo", "html" and "man". The next |
| 186 | 'fetch' or 'pull' will create them again unless you configure them not to. |
| 187 | See linkgit:git-fetch[1]. |
| 188 | <2> Delete the "test" branch even if the "master" branch (or whichever branch |
| 189 | is currently checked out) does not have all commits from the test branch. |
Junio C Hamano | c8d88c2 | 2006-04-29 07:02:01 | [diff] [blame] | 190 | |
| 191 | |
| 192 | Notes |
| 193 | ----- |
| 194 | |
Junio C Hamano | fd83b8e | 2009-03-22 08:21:41 | [diff] [blame] | 195 | If you are creating a branch that you want to checkout immediately, it is |
Junio C Hamano | c8d88c2 | 2006-04-29 07:02:01 | [diff] [blame] | 196 | easier to use the git checkout command with its `-b` option to create |
| 197 | a branch and check it out with a single command. |
| 198 | |
Junio C Hamano | fd83b8e | 2009-03-22 08:21:41 | [diff] [blame] | 199 | The options `--contains`, `--merged` and `--no-merged` serve three related |
Junio C Hamano | 47d68a5 | 2008-05-06 06:35:40 | [diff] [blame] | 200 | but different purposes: |
| 201 | |
| 202 | - `--contains <commit>` is used to find all branches which will need |
| 203 | special attention if <commit> were to be rebased or amended, since those |
| 204 | branches contain the specified <commit>. |
| 205 | |
| 206 | - `--merged` is used to find all branches which can be safely deleted, |
| 207 | since those branches are fully contained by HEAD. |
| 208 | |
| 209 | - `--no-merged` is used to find branches which are candidates for merging |
| 210 | into HEAD, since those branches are not fully contained by HEAD. |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 211 | |
| 212 | Author |
| 213 | ------ |
Junio C Hamano | 0868a30 | 2008-07-22 09:20:44 | [diff] [blame] | 214 | Written by Linus Torvalds <torvalds@osdl.org> and Junio C Hamano <gitster@pobox.com> |
Junio C Hamano | 1a4e841 | 2005-12-27 08:17:23 | [diff] [blame] | 215 | |
| 216 | Documentation |
| 217 | -------------- |
| 218 | Documentation by Junio C Hamano and the git-list <git@vger.kernel.org>. |
| 219 | |
| 220 | GIT |
| 221 | --- |
Junio C Hamano | f7c042d | 2008-06-06 22:50:53 | [diff] [blame] | 222 | Part of the linkgit:git[1] suite |