tags:

views:

239

answers:

3

I started work on what I thought would be a minor bug fix on my master branch. However, it has spiraled out of control to the point where I wish I had created a separate branch to do the development in the first place.

So right now what I'd like to do is:

  1. Create a new branch called (say) "edge"
  2. Move all the changed / untracked files on master to edge (such that master is unchanged from when I started the bug fix)
  3. Finish my work on edge, merge back into master

How can I do this?

+4  A: 

If you haven't been committing anything yet, you're already in the right position.

  1. Create a new branch: git checkout -b edge
  2. Your files haven't changed. Just git add what needs to and commit as usual.
  3. When you're done committing on edge, switch back to master with git checkout and git merge edge.
JB
+6  A: 

To add to JB's answer, if you have already started to make a few commits on master for what ended up as being a "edge" effort, you could:

  • git stash
  • checkout -b edge SHA1_before_your_commits
  • rebase master # to replay all your commits on top of this new branch
  • git checkout master
  • git reset --hard SHA1_before_your_commits
  • git checkout edge
  • git stash apply
VonC
A: 

If you are trying to move the work from master to a branch that already exists, but is behind master, git won't let you switch to the other branch. In this case, do this:

git stash
git checkout oldBranch
git merge master
git checkout master
git stash apply
git checkout oldBranch
Jesse P