I recently needed to merge several topic branches into a client’s staging branch, starting the process apparently before I drank enough morning coffee and wound up with a pretty nasty set of merge conflicts. The conflicts came about because I merged the branches in an improper order, starting by merging a branch which was based off the other branch that additionally required merging, winding up with a mess that looked like this:
$ git merge add_client_comments_83612372 Auto-merging db/schema.rb CONFLICT (content): Merge conflict in db/schema.rb Auto-merging app/views/specifications/show.html.erb CONFLICT (content): Merge conflict in app/views/specifications/show.html.erb
Fortunately, undoing a Git merge containing conflicts you’d rather avoid is pretty easy. Begin by reviewing your recent commits:
$ git log --oneline -n3 6c1557d Merged branch add_comments_83612372 0fd0892 Merge branch 'editable_82327726' into staging c07eca0 finish with edits to top nav
I want to revert back to the commit associated with
0fd0892, and so I’ll next execute
reset, identifying the commit SHA:
$ git reset --hard c07eca0 HEAD is now at c07eca0 finish with edits to top nav
With that done, I can begin the merge process anew.
The bottom line on this matter is that Git can be a bit scary at times, however when circumstances such as the above arise it’s a certainty you’ll be able to deal with them in a sane fashion; just be sure to do a bit of homework before executing any commands which deal with effectively destroying uncommitted data, because once that data is gone it is gone forever (or until you rewrite the code)!