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.
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.
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!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With