Starting a new git branch in the past
Imagine you started working on a new feature and realized you didn't start a new branch, so all your recent commits accidentally went to main
. I do this all the time.
If you didn't push your working branch to the upstream, there is an easy fix.
First, create a new feature branch from the HEAD
:
git checkout -b new-branch-name
Then move your integration branch to the past (assuming the branch name is main
, and you want to start new-branch-name
3 commits ago from the HEAD
):
git branch -f main HEAD~3
HEAD~3
means "third last commit from the HEAD" (if HEAD
is your current checked-out commit, HEAD~1 is the previous one, etc.).
The alternative syntax for this example is HEAD~~~
. It can be easier to type unless you must go too deep into the past.
It becomes more tricky if you merge something in the recent commit history. Git provides a ^
(caret) shortcut for ancestry reference in the case of multiple parent revisions. But I'd prefer ordinary commit ids. It is not as easy to mess up compared to caret syntax.
References:
Somewhat related: