Revert merge Git-Flow

2019-04-10 13:56发布

问题:

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)?

回答1:

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


标签: git git-flow