Diskdrive
Diskdrive

Reputation: 18825

Is there one command to create or checkout an existing branch?

git switch <branch> allows me to move to an existing branch.

git switch -c <branch> allows me to create a new branch.

Is there a command where dependent on whether the branch already exists, it'll either create a new branch or check out the existing one?

Upvotes: 0

Views: 107

Answers (2)

knittl
knittl

Reputation: 265151

There is nothing built in, but it is easy to define an alias or write a script:

if git show-ref --quiet "refs/heads/$branchname"; then
  git switch "$branchname";
else
  git switch -c "$branchname";
fi

or perhaps

git show-ref --quiet "refs/heads/$branchname" || create=-c;
git switch ${create:+"$create"} "$branchname"

Configuring it as alias:

git config --global alias.sw '!f() { if git show-ref --quiet "refs/heads/$1"; then git switch "$1"; else git switch -c "$1"; fi; }; f'

(or variant 2:)

git config --global alias.sw '!f() { git show-ref --quiet "refs/heads/$1" || create=-c; git switch ${create:+"$create"} "$1"; }; f'

Then use:

git sw branch-to-checkout-or-create

Upvotes: 2

root
root

Reputation: 6038

I'm not aware of such a command, but you can create an alias that will do it for you, in this example git csw (git show-branch will mark the current branch with * and will show that no branch has been reset):

$ git config alias.csw '!sh -c "git switch $1 || git switch -c $1"'
$ git show-branch
* [branch-a] b
 ! [master] h
--
*  [branch-a] b
*+ [master] h
$ git csw master
Switched to branch 'master'
$ git show-branch
! [branch-a] b
 * [master] h
--
+  [branch-a] b
+* [master] h
$ git csw branch-a
Switched to branch 'branch-a'
$ git show-branch
* [branch-a] b
 ! [master] h
--
*  [branch-a] b
*+ [master] h
$ git csw branch-b
fatal: invalid reference: branch-b
Switched to a new branch 'branch-b'
$ git show-branch
! [branch-a] b
 * [branch-b] b
  ! [master] h
---
+*  [branch-a] b
+*+ [master] h

Upvotes: 1

Related Questions