Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Create git branch, and revert original to upstream state

I recently screwed up my git repo and would like to find out if there is any remedy to it.

My setup is this:

Central repo on github. Personal repo on github (which is a fork of Central)    +Central is setup as remote (upstream/master)    +Master branch (origin/master)    +Feature branch (origin/feature) 

My workflow was like this:

Need to fix something in Central:    1. checkout Master    2. Make changes    3. Pull from upstream/master and merge    3. Commit, push to upstream/master  Need to work on a New Feature:    1. Checkout/Create Feature branch    2. Work work work    3. Pull from upstream/master and merge    4. Commit, push to upstream/master 

This way I always had a pristine state of Central in my Master branch.

Now what I did was started working on Master branch instead. So I made changes to my master and can no longer branch from it to get a copy of Central. Whenever I need to make and push some fixes to Central, i have to clone the Central into another directory and work from there.

My question: Is there a way to "revert" my master to be an identical copy of the Central, while moving all the changes I have made on my Master into another branch (say Feature)?

I know it's confusing, and I would appreciate any help. I will clarify if anything is unclear.

like image 609
Andriy Drozdyuk Avatar asked Apr 21 '09 14:04

Andriy Drozdyuk


People also ask

How do I create an upstream branch in origin?

Create a new branch with the branch, switch or checkout commands. Perform a git push with the –set-upstream option to set the remote repo for the new branch. Continue to perform Git commits locally on the new branch. Simply use a git push origin command on subsequent pushes of the new branch to the remote repo.


1 Answers

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!

like image 141
Andriy Drozdyuk Avatar answered Oct 03 '22 19:10

Andriy Drozdyuk