How to move a branch backwards in git?
If there are no commits on branch A
, then the git reset --hard B
solution given by Bram Schoenmakers will work.
However if there are commits are branch A
which must be preserved, then the following should do the trick:
- Make a backup copy of your repo (just in case)
git checkout A
git rebase -i --onto B SHA1-A^
...where SHA1-A^
is the commit id of the parent of your branch A
See the git rebase
man page for details.
NOTE: This will rewrite history (as rebase always does). Special consideration should be made if your A
branch was ever pushed to a public repo.
Use the reset subcommand:
git checkout A
git reset --hard B
git push --force github
As a sidenote, you should be careful when using git reset
while a branch has been pushed elsewhere already. This may cause trouble to those who have already checked out your changes.
I usually use this sequence and find it the simplest way:
git checkout B
git branch -f A B
Delete the branch both locally and remotely, recreate the branch, push the branch back up to the server.
git branch -d A
git push origin :heads/A
git branch B A
git push origin A:A
Alternately you can use the following command to undo that last commit.
git revert c4
Which will make your timeline look like:
c1--c2--c3--(B)
\
c4--(C)
\
(^c4)--(A)
where (^c4)
is a commit that undoes c4
I don't recommend using rebase
or revert
on a branch that has been pushed to a remote repo, they can cause tons of trouble for you or anyone else using that repo.