How to undo a git merge with conflicts
I am on branch mybranch1
. mybranch2
is forked from mybranch1
and changes were made in mybranch2
.
Then, while on mybranch1
, I have done git merge --no-commit mybranch2
It shows there 开发者_开发百科were conflicts while merging.
Now I want to discard everything (the merge
command) so that mybranch1
is back to what it was before.
I have no idea how do I go about this.
Latest Git:
git merge --abort
This attempts to reset your working copy to whatever state it was in before the merge. That means that it should restore any uncommitted changes from before the merge, although it cannot always do so reliably. Generally you shouldn't merge with uncommitted changes anyway.
Prior to version 1.7.4:
git reset --merge
This is older syntax but does the same as the above.
Prior to version 1.6.2:
git reset --hard
which removes all uncommitted changes, including the uncommitted merge. Sometimes this behaviour is useful even in newer versions of Git that support the above commands.
Actually, it is worth noticing that git merge --abort
is only equivalent to git reset --merge
given that MERGE_HEAD
is present. This can be read in the git help for merge command.
git merge --abort # is equivalent to git reset --merge when MERGE_HEAD is present.
After a failed merge, when there is no MERGE_HEAD
, the failed merge can be undone with git reset --merge
but not necessarily with git merge --abort
, so they are not only old and new syntax for the same thing.
Personally I find git reset --merge
much more useful in everyday work.
Assuming you are using the latest git,
git merge --abort
If using latest Git,
git merge --abort
else this will do the job in older git versions
git reset --merge
or
git reset --hard
There are two things you can do first undo merge by command
git merge --abort
or
you can go to your previous commit state temporarily by command
git checkout 0d1d7fc32
Since nobody mentioned this before, if you get this error
fatal: Could not reset index file to revision 'HEAD'.
when trying the above methods you can try adding the files (staging them) and then instead of committing just do git stash
you can use the -m
flag and give it a tag so you know if you do by chance need to recover that last state you can find the stash with git stash list
.
For me, git reset --merge
and git merge --abort
failed with above error.
Sourcetree
If you not commit your merge, then just double click on another branch (=checkout) and when sourcetree ask you about discarding all changes then agree
精彩评论