Switch on another branch (create if not exists), without checking if already exists?
git checkout -b foo
switches on foo
branch (even if it doesn't exist, it is created), but if the foo
branch already exists it throws an error like this:
fatal: A branch named 'foo' already exists.
What's the command that does the following check?
- if the branch already exists, just switch on it (
git checkout foo
) - if the branch doesn't exist, create it and switch on it (
git checkout -b foo
)
Update Q3 2019 (Git 2.23): there now actually is a git switch
command!
git switch -c aBranch
You would need a similar alias though:
switchoc = "!f() { git switch $1 2>/dev/null || git switch -c $1; }; f"
Note the name of the alias: switchoc (for "switch or create").
As jar
pointed out in the comments:
Anyone trying this in 2021, note that you cannot shadow existing
git
commands with aliases.
Sincegit switch
is agit
command, this alias (named "switch
") won't work. You must create your unique name for the alias, like "switchit
" or something.
bgusach's alias mentioned below in the comment is safer (based on Jiří Pavelka 's answer):
switch = "!f() { git checkout $1 2>/dev/null || git checkout -b $1; }; f"
git switch abranch
Original answer (2014) You can try:
git checkout -B foo
From git checkout
man page:
If
-B
is given,<new_branch>
is created if it doesn’t exist; otherwise, it is reset. This is the transactional equivalent of
$ git branch -f <branch> [<start point>]
$ git checkout <branch>
As mentioned below, use it with caution as it does reset the branch, which is not always desirable.
If you did reset the branch by mistake with this command, you can easily revert to its previous state with:
git reset HEAD@{1}
Agreed with ssmith. Had the same problem and -B
does not solve it, coz of reset. His solution works, however my solution looks simpler:
git checkout foo || git checkout -b foo
That works for me :)
EDIT
Without error output iff foo not exists
git checkout foo 2>/dev/null || git checkout -b foo