Revert merge Git-Flow
This is quite easy. Things you will need to do are:
Reset develop branch to the commit it was before merge
Reset master branch to the commit it was before merge
Have the release branch point to the correct commit again
Remove the tag
Push the fixed commits to remote
So to do steps 1 and 2:
git checkout develop
git reset --hard 4332fe4
git checkout master
git reset --hard <SHA of the commit the master was before the merge>
Then to "recreate" the release branch:
git checkout -b "release/v1.0.1" 28a63ea
And finally to remove the tag:
git tag -d v1.0.1
More information about undoing a merge in this stackoverflow question
After that, if the changes were already pushed, you need to use the -f switch to override changes in remote:
git push -f
And to delete the tag from the remote:
git push --delete origin v1.0.1
Peter Warbo
I work as IT consultant in Gothenburg, Sweden, doing mobile development mostly for iOS.
Updated on June 23, 2022Comments
-
Peter Warbo about 2 years
I'm using SourceTree and Git-Flow pattern. Now I have prepared a release for my beta-testers to test so I created a new
release/v1.0.1
branch. But my mind slipped and I decided to finish (merge intodevelop
andmaster
and tag) the release even though I haven't even sent out the release to my testers. So I would like to have the release branch open up again if my testers finds any bugs I can fix these bugs in the release branch and then when all bugs are fixed I can finish the release.So how can I easily with SourceTree preferably (or using git commands) revert back to the state when I had the
release/v1.0.1
branch?Attached screendump from SourceTree:
EDIT: Okay I did the
git reset --hard HEAD~2
ondevelop
(HEAD~2) because I had tested manually checking out. But now when I checkoutmaster
and do agit reflog
it seems to me that I should do a reset on HEAD~6Peters-MacBook-Pro:Remessage peterwarbo$ git reflog f7663b1 HEAD@{0}: checkout: moving from develop to master 3d132da HEAD@{1}: reset: moving to HEAD~2 2f1c753 HEAD@{2}: checkout: moving from master to develop f7663b1 HEAD@{3}: checkout: moving from develop to master 2f1c753 HEAD@{4}: merge release/v1.0.1: Merge made by the 'recursive' strategy. 4332fe4 HEAD@{5}: checkout: moving from master to develop f7663b1 HEAD@{6}: merge release/v1.0.1: Merge made by the 'recursive' strategy. fe323ef HEAD@{7}: checkout: moving from release/v1.0.1 to master 28a63ea HEAD@{8}: commit: Bumped version number to 1.0.1
But when I do that I get this "error":
Peters-MacBook-Pro:Project peterwarbo$ git reset --hard HEAD~6 fatal: ambiguous argument 'HEAD~6': unknown revision or path not in the working tree.
EDIT 2: New image to illustrate fuckup.
EDIT 3: Attached new image to illustrate the current state now after issuing the git commands in user1615903´s answer. Why does it say that develop is 2 behind? And why is there a merge from
release/v1.0.1
to master even though I did a reset to master to the initial commit (fe323ef
)? -
Peter Warbo about 11 yearsI tried what you recommended but I seem to be stuck now? See my updated question please.
-
1615903 about 11 yearsSo, you did reset with HEAD~2? That means you moved the branch tip two commits behind, and now you are trying to move it 6 more commits behind? Please include a new picture from SourceTree, it really helps to illustrate this.
-
Peter Warbo about 11 yearsSo I foobared? Can I undo that? (I have my repository mirrored at Bitbucket fortunately) I'm uploading new picture now.
-
1615903 about 11 yearsEdited my answer so that it refers to commit SHA's instead of HEAD-something. Don't worry, it's really difficult to PERMANENTLY delete things in git.
-
1615903 about 11 years