git: switch branch without detaching head

git clone [email protected]:abc/def.git
cd def

Now create a tracking branch:

git branch --track experimental origin/experimental
git checkout experimental

Then, after working there, simply push to github by

git push

To expand on Kent's reply, after you do your clone the only branch you'll have (remotes don't count) is the one that was active in the repository you cloned from -- master in your case.

So, first you'll want to create a new branch to track the remote experimental branch:

$ git branch experimental origin/experimental

and then check it out:

$ git checkout experimental

However, Kent is correct -- these two commands can be combined

$ git checkout -b experimental origin/experimental

# first time: make origin/branchname locally available as localname
git checkout -b localname origin/branchname 

# othertimes 
git checkout localname 

git push origin

For convenience, you may use the same string for localname & branchname
When you checked out origin/branchname you weren't really checking out a branch. origin/branchname is a "remote" name, and you can get a list of them with

branch -a 

If you have colours enabled, local branches will be one colour, and remote another.

You have to first make a remote branch tracked locally in order to be able to switch-to and work on it.


With Git 2.23 (August 2019), you would use the git switch command

If you have a remote branch of the same name, it will be automatically tracked:

$ git switch new-topic
Branch 'new-topic' set up to track remote branch 'new-topic' from 'origin'
Switched to a new branch 'new-topic'