I started working on my master branch thinking that my task would be easy. After a while I realized it would take more work and I want to do all this work in a new branch.
How can I create a new branch and take all these changes with me without dirtying master?
You can do a checkout and create a new branch with all local and current changes transferred over.
The git checkout -b <BranchName> command will create a new branch and switch to it. Moreover, this command will leave the current branch as it is and bring all uncommitted changes to the new branch.
New Branches Git checkout works hand-in-hand with git branch . The git branch command can be used to create a new branch. When you want to start a new feature, you create a new branch off main using git branch new_branch . Once created you can then use git checkout new_branch to switch to that branch.
If you hadn't made any commit yet, only (1: branch) and (3: checkout) would be enough.
Or, in one command: git checkout -b newBranch
With Git 2.23+ (Q3 2019), the new command git switch
would create the branch in one line (with the same kind of reset --hard
, so beware of its effect):
# First, save your work in progress! git stash # Then, one command to create *and* switch to a new branch git switch -f -c topic/wip HEAD~3
As mentioned in the git reset
man page:
$ git stash # (0) Save your work in progress $ git branch topic/wip # (1) $ git reset --hard HEAD~3 # (2) NOTE: use $git reset --soft HEAD~3 (explanation below) $ git checkout topic/wip # (3)
master
" branch. You want to continue polishing them in a topic branch, so create "topic/wip
" branch off of the current HEAD
.master
branch to get rid of those three commits.topic/wip
" branch and keep working.Again: new way (since 2019 and Git2.23) to do all that in one command:
git switch -f -c topic/wip HEAD~3
Note: due to the "destructive" effect of a git reset --hard
command (it does resets the index and working tree. Any changes to tracked files in the working tree since <commit>
are discarded), I would rather go with:
$ git reset --soft HEAD~3 # (2)
This would make sure I'm not losing any private file (not added to the index).
The --soft
option won't touch the index file nor the working tree at all (but resets the head to <commit>
, just like all modes do).
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