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 into develop
and master
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
on develop
(HEAD~2) because I had tested manually checking out. But now when I checkout master
and do a git reflog
it seems to me that I should do a reset on HEAD~6
Peters-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
)?
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:
Then to "recreate" the release branch:
And finally to remove the tag:
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:
And to delete the tag from the remote: