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
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
The following answer presumes that your feature
branch is already published to the remote. I would just cherry pick commits C
and D
from the feature
branch onto the master
branch, and then revert these two commits on feature
:
git checkout master
git checkout -b other_feature
git cherry-pick <SHA-1 for C>
git cherry-pick <SHA-1 for D>
git checkout feature
git revert <SHA-1 for C>
git revert <SHA-1 for D>