Rollback a Git merge
develop branch
--> dashboard (working branch)
 I use git merge --no-ff develop to merge any upstream changes into dashboard  
git log:
commit 88113a64a21bf8a51409ee2a1321442fd08db705
Merge: 981bc20 888a557
Author: XXXX <>
Date:   Mon Jul 30 08:16:46 2012 -0500
    Merge branch 'develop' into dashboard
commit 888a5572428a372f15a52106b8d74ff910493f01
Author: root <root@magneto.giveforward.com>
Date:   Sun Jul 29 10:49:21 2012 -0500
    fixed end date edit display to have leading 0
commit 167ad941726c876349bfa445873bdcd475eb8cd8
Author: XXXX <>
Date:   Sun Jul 29 09:13:24 2012 -0500
The merge had about 50+ commits in it, and I am wondering how to just revert the merge so dashboard goes back to the state pre-merge
 The second part of this is, if I dont do merge with --no-ff , I don't get the commit ' Merge branch 'develop' into dashboard ' .. How would I roll that merge back?  
 Reverting a merge commit has been exhaustively covered in other questions.  When you do a fast-forward merge, the second one you describe, you can use git reset to get back to the previous state:  
git reset --hard <commit_before_merge>
 You can find the <commit_before_merge> with git reflog , git log , or, if you're feeling the moxy (and haven't done anything else): git reset --hard HEAD@{1}  
From here:
http://www.christianengvall.se/undo-pushed-merge-git/
git revert -m 1 <merge commit hash>
Git revert adds a new commit that rolls back the specified commit.
Using -m 1 tells it that this is a merge and we want to roll back to the parent commit on the master branch. You would use -m 2 to specify the develop branch.
 Just reset the merge commit with git reset --hard HEAD^ .  
 If you use --no-ff git always creates a merge, even if you did not commit anything in between.  Without --no-ff git will just do a fast forward, meaning your branches HEAD will be set to HEAD of the merged branch.  To resolve this find the commit-id you want to revert to and git reset --hard $COMMITID .  
上一篇: 重写GIT历史的实际后果是什么?
下一篇: 回滚Git合并
