+++ date = "2012-08-14" title = "Move your latest commits to a separate branch" tags = ["git", "protip"] slug = "move-your-latest-commits-to-a-separate-branch" +++ The situation is pretty straightforward. You have been making commits for that new feature in your `master` branch. Naughty you! Let's assume you want to have this: ``` text A - B - (C) - D - E - F ``` `C` was the last commit you pulled from `origin` and D, E and F are commits you just made but should have been in their own branch. This is what you wanted: ``` text A - B - (C) \ D - E F ``` Step 1: Assuming you're at `F` on `master`, create a new branch with those commits: ``` shell git branch my_feature_branch ``` Then, still on `master`, reset back to commit `C`. This is 3 commits back. ``` shell git reset --hard HEAD~3 ``` Okay, you're `master` is now back at `C`, which you lasted pulled, and the `my_feature_branch` includes D, E and F. Just checkout `my_feature_branch` and continue work as usual. I'm sure no one saw what you just did.