Zygro Zygro - 3 months ago 8
Git Question

How to rebase only last two commits without the whole branch?

I accidentally committed to a wrong branch. The graph looks like this

----o--o-----o (master)
\
\
A--B--C--D (feature)


I want to move C and D to master without the changes in A and B. I want the graph to look like this

----o--o-----o (master)
\ \
\ C--D (other_feature)
\
A--B (feature)


is this possible? and how to do it also on remote?

Changes in A and B are not going to be merged so I don't care if the commits will be lost

Answer

Warning: The following git commands will rewrite the history of the feature branch. git rebase and git reset are dangerous because it can wreak havoc for anyone else who is using the feature branch.

First create the branch other_feature at the same commit as feature.

git checkout -b other_feature feature

Rebase the previous two commits onto master.

git rebase --onto master HEAD~2

Checkout feature.

git checkout feature

Reset feature to the commit where you want it.

git reset --hard HEAD~2
Comments