Git create branch from current checked out master?

There is a git controlled folder on a server where the main branch is checked out and a whole pile of files have been modified and not committed. Is there a way for me to commit the changes to a separate branch so I can go back to a clean version?

ie I want to effecitvely undo all this persons changes but store them in another chance so if that person wants their changes they can switch to that branch.

(Yes I know this is not how git is designed to work but that is my situation!) Any ideas very much appreciated.


Solution 1:

First of all moving to a different branch based in the current HEAD is performed like this:

git checkout -b newbranch

Commit all the changes (assuming no newly added files, otherwise git add them):

git commit -a

Go back to the master branch:

git checkout master

The previously uncommitted changes will all be on the newbranch branch, and master will still be at the state it was without those changes.

Solution 2:

You can always stash your changes.

git stash
git checkout -b bravenewmaster
git stash apply

Also keep in mind, that if you commit to the "wrong" branch you can always move that branch back, because branch is nothing but a pointer to a commit.

Solution 3:

This method is useful:

git checkout -B <new_branch> <start point>

Where:

  • <new_branch> is your new branch (e.g. my_branch)
  • <start point> is your starting branch (master in your case)
  • -B creates new branch starting from <start point>, if it already exists, then reset it to (it won't fail as -b when branch already exists)
  • sometimes -m can useful to specify when switching branches, this will perform a three-way merge between the current branch, your working tree contents (useful for scripting).

See: man git-checkout for more details.