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
)?
You have to make a decision as soon as possible either you push a hotfix or revert your merge immediately. If you decide to revert your changes then this the flow that you need to follow First, create a new branch/pr from master. Run the command git log and find the hash of the merge commit.
git revert will make sure that a new commit is created to revert the effects of that unwanted merge. This is in contrast to git reset, where we effectively "remove" a commit from the history. That's also the reason why git revert is a better solution in cases where you've already pushed to a remote. The -m 1 option tells Git that we want ...
This command takes a particular commit, but it doesn’t move ref commits to that commit. The git revert operation takes the particular commit, inverses its changes, and generates a new “revert commit”. But you should also consider that git revert can undo a single commit and will not return to the previous state of your project.
$ git revert -m 1 <merge-commit-hash> Let's take a closer look at what this command will do: git revert will make sure that a new commit is created to revert the effects of that unwanted merge. This is in contrast to git reset, where we effectively "remove" a commit from the history.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With