gitでmergeをundoするのどうするんだろう

ユースケース1

作業をお願いしていた人からファイルがメールで送られてくる。自分のほうで進めてた作業を一旦脇にどけておいて、二人が共通の底本にしているファイルをもらったファイルで上書き、自分の作業をマージしよう、としたらおい文字コード変えてんじゃねえよ!

$ git add foo
$ git commit -m "working"
$ git tag mine
$ git reset HEAD^
(ファイル上書き)
$ git merge mine
→改行コードが変わっていて盛大にコンフリクト

.git/MERGE_HEADを削除して、fooをgit checkout HEAD^ fooしたが、もうちょっとスマートな方法があるのかな?

ユースケース2

マージしてみたら相手方の修正が数行に1行書き換えてるものだったことが原因なのかなんなのかオートマージに失敗して大量のコンフリクトメッセージが突っ込まれている…。
これはマージしないでadd -pとかの方がいいのか?試すためにまた.git/MERGE_HEADを削除して、fooをgit checkout HEAD^ fooして元に戻す。

$ git checkout mine foo 

これでstagedな状態でfooが自分の更新したものになるので、ここからresetでunstageしてからadd -pする。(reset -pでもいいかもだけど不慣れなので慣れてる方でやる)

$ git reset HEAD foo
$ git add -p  foo 

これで僕がやった方の作業(こっちのほうが圧倒的に数が少ない)をaddして、コミット。その後checkout HEAD fooして相手が変更して僕が変更してない点について僕が上書きしたせいで変更したことになっているのを破棄。

$ git commit -m "merge my changes"
$ git checkout HEAD foo

目的は達成できたけど、もっといい方法があったりしないのかなぁ。