Create git branch, and revert original to upstream state

# Make sure we're on the master branch
$ git checkout master

# Make a new branch to hold the work I've done
$ git branch old_master

# Reset my local master back to match origin/master
$ git reset --hard origin/master

Now you can checkout old_master and use it just like you did your feature branch


Well the solution was pretty simple, hinted by Pat Notz and Bombe.

#Make sure we're on the master branch
$ git checkout master

# Make a new branch to hold the work I've done
$ git branch old_master

# Save this branch on my remote repo (for backup)
$ git checkout old_master
$ git push origin old_master

# Reset my local master back to match the commit just before I started 
# working on my new feature
$ git checkout master
$ git reset --hard 2aa93842342342

# Get it to be the same as my Central
$ git pull upstream master

# Now DELETE my master on my remote repo
$ git push origin :master

# And recreate it
$ git push origin master

# Branch created!
#* [new branch]      master -> master

#

Now I have two nice branches: master and old_master. With master being a copy of my Central, for fixes to production, and old_master holding all the work that I did previously!

Thanks!


What exactly do you mean by

I messed [up] my master and can no longer branch from it.

You can always create a new branch from any commit in your repository, no matter how “messed up” it may be–which by the way is something Git has no notion of.

Basically you can revert your repository to any state it previously had because Git will not explicitely delete any objects, it will only garbage collect unreferenced (dangling) objects every now and then. So you just need to find out what your repository looked like. gitk or git log can help you there.

After you restored your local repository to a state you like you can simply push it back to your central public repository. If that results in a non-fast-forward push you might need to specify the --force flag when pushing.