git stash popでコンクリフトした時の解決方法

git stashは作業中の内容を一旦退避することができるため大変便利で結構使ってますが
remoteや他branchからrebase等で変更を適応する時にstashしてから適応。
変更箇所がかぶったりするとgit stash popした時にCONFLICTが発生します。


その時の解決方法のメモ。

1. 手動マージ

Gitは自動的に解決できない衝突が発生するとファイルに衝突箇所をマーキングしてくれます

++<<<<<<< Updated upstream
// 現在のコミット
++=======
// コンクリフトした内容
++>>>>>>> Stashed changes

手動で採用したい記述を残してgit addしてCONFLICTを解決します。
これが一般的でいつもこの作業をしていました。

2. git checkoutによる解決

例えばうまくマージする必要はなくてstashの内容は無視!とかstashの内容を採用とかやりたい時
にはcheckoutコマンドで解決することができます。

現在のコミットを採用する場合
$ git checkout --ours .
stashを採用する場合
$ git checkout --theirs .


stash側が今回はmergeする側なのでtheirs。現在のコミットがoursになります。
checkoutを実行したらgit addをしてあげてCONFLICTを解決させてください。
また、stash popした場合でもCONFLICTした場合dropは行われないので解決後不要であればgit stash dropで該当stashを消します。