stephen.news

hypertext, words and more

How to Move Existing, Uncommitted Work to a New Branch in Git

So here’s a new one for ya.

I was working on a branch all day, closed the laptop, went home and fell asleep. Nothing out of the ordinary. The next day, I awoke, and upon returning to work, immediately began working on a new problem.

The issue arose when I discovered to my horror that I was still on the same branch from yesterday! *Gasp*

Lest we forget, we have Git at our disposal — so I take a breath and dive in:

git status

This will probably return a list of changes not staged like this:

On branch fix-from-yesterday
Your branch is up to date with 'origin/fix-from-yesterday-'.

Changes not staged for commit:
(use "git add …" to update what will be committed)
(use "git checkout -- …" to discard changes in working directory)
modified: project/api-v4.php
modified: web/assets/js/some-project/package.json
...

Now that we have a pulse on things, we can do this:

git checkout -b new-branch-of-changes-for-today

This will leave your current branch as is, create and checkout a new branch and keep all your changes. You can then make a commit with:

git add <the files you want commit>

and finally, commit to your new branch with ol trusty:

git commit -m "Make sure your description is short and sweet"

And there you have it! According to the git-checkout documentation, -b and -B are interchangeable. Here’s the rub:

Specifying -b causes a new branch to be created as if git-branch[1] were called and then checked out. In this case you can use the --track or --no-track options, which will be passed to git branch. As a convenience, --track without -b implies branch creation; see the description of --trackbelow.


If -B is given, <new_branch> is created if it doesn’t exist; otherwise, it is reset. This is the transactional equivalent of