gitのコンフリクト解消時の差分がgit log -pで確認できない件

自分が入れたはずの修正が消えていて、`git log -p`してもどこで消えたかわからなかったので、いろいろ試してみました。


## 問題の状況を作る

元ファイル

```text
aaa
bbb
ccc
```

masterブランチにて２行目をbbb -> dddに修正

```text
aaa
ddd
ccc
```

developブランチにて２行目をbbb -> eeeに修正

```text
aaa
eee
ccc
```


以下のコマンドでコンフリクトを発生させる

```bash
git checkout master
git merge develop
```

```
@@@ -1,3 -1,3 +1,7 @@@
  aaa
++<<<<<<< HEAD
 +ddd
++=======
+ eee
++>>>>>>> develop
```

コンフリクトを解消して、そのままコミット。今回はdevelopを採用。

```text
aaa
eee
ccc
```

※今回は、`git checkout --theirs` または`git checkout --ours`したのと同じ状況になっているのが肝。masterもdevelopも採用せず、別の修正を入れていた場合は、`git log -p -c` で見れる。


## いつものようにログを確認してみる

ここで`git log -p`で差分を見つつログを確認。masterブランチで修正した**ddd**が消されたことが、ログを見ても表示されない。`git log -p -c` でも表示されませんでした。

```text
$ git log -p
commit 0fb187e5be7f74833bdd8c1babd8e661a10aa9cc
Merge: f7dad6e 85059c2
Author: kbysta1
Date:   Thu May 4 21:58:14 2017 +0900

    Merge branch 'develop'

commit 85059c24f06822e43820a14c320c1616de94f067
Author: kbysta1
Date:   Thu May 4 21:55:22 2017 +0900

    bbb -> eee

diff --git a/conflict.txt b/conflict.txt
index 1802a74..a697229 100644
--- a/conflict.txt
+++ b/conflict.txt
@@ -1,3 +1,3 @@
 aaa
-bbb
+eee
 ccc

commit f7dad6e6add61d8541178fd069686b8db0a8f0b7
Author: kbysta1
Date:   Thu May 4 21:54:36 2017 +0900

    bbb -> ddd

diff --git a/conflict.txt b/conflict.txt
index 1802a74..49dba14 100644
--- a/conflict.txt
+++ b/conflict.txt
@@ -1,3 +1,3 @@
 aaa
-bbb
+ddd
 ccc

commit eaa9e73e6e7f3ffe0b68d63afc9245cc8635eab5
Author: kbysta1
Date:   Thu May 4 21:41:58 2017 +0900

    first commit
```

`git diff HEAD^` で消えたことは確認できるんですが、これが１ヶ月前の出来事とかだと、どこで消えたのか特定するのが困難です。GithubのHistoryも同様でした。

またファイル指定でログを見ると、マージコミットすら表示されません。

```
$ git log conflict.txt
commit 85059c24f06822e43820a14c320c1616de94f067
Author: kbysta1
Date:   Thu May 4 21:55:22 2017 +0900

    bbb -> eee

commit eaa9e73e6e7f3ffe0b68d63afc9245cc8635eab5
Author: kbysta1
Date:   Thu May 4 21:41:58 2017 +0900

    first commit

```


## いくつか使えたコマンド

`git show -m <hash>`でコミットハッシュ指定で表示可能できた。
※この場合だと消えたコミットを特定しておく必要がある。

```
$ git show -m 08d09f0fb7d24905301bb87fa14cd4f09388e196
commit 08d09f0fb7d24905301bb87fa14cd4f09388e196 (from f7dad6e6add61d8541178fd069686b8db0a8f0b7)
Merge: f7dad6e 85059c2
Author: kbysta1 
Date:   Thu May 4 22:52:40 2017 +0900

    Merge branch 'develop'

    Conflicts:
          conflict.txt

diff --git a/conflict.txt b/conflict.txt
index 49dba14..a697229 100644
--- a/conflict.txt
+++ b/conflict.txt
@@ -1,3 +1,3 @@
 aaa
-ddd
+eee
 ccc
```

---

`git log -p -m` でマージコミットの差分含めて見れた。
※ファイル指定だと表示されない。`git log --stat`しても表示されないので。

```
commit 08d09f0fb7d24905301bb87fa14cd4f09388e196 (from f7dad6e6add61d8541178fd069686b8db0a8f0b7)
Merge: f7dad6e 85059c2
Author: kbysta1
Date:   Thu May 4 22:52:40 2017 +0900

    Merge branch 'develop'

    Conflicts:
          conflict.txt

diff --git a/conflict.txt b/conflict.txt
index 49dba14..a697229 100644
--- a/conflict.txt
+++ b/conflict.txt
@@ -1,3 +1,3 @@
 aaa
-ddd
+eee
 ccc

commit 85059c24f06822e43820a14c320c1616de94f067
Author: kbysta1
Date:   Thu May 4 21:55:22 2017 +0900

    bbb -> eee

diff --git a/conflict.txt b/conflict.txt
index 1802a74..a697229 100644
--- a/conflict.txt
+++ b/conflict.txt
@@ -1,3 +1,3 @@
 aaa
-bbb
+eee
 ccc

commit f7dad6e6add61d8541178fd069686b8db0a8f0b7
Author: kbysta1
Date:   Thu May 4 21:54:36 2017 +0900

    bbb -> ddd

diff --git a/conflict.txt b/conflict.txt
index 1802a74..49dba14 100644
--- a/conflict.txt
+++ b/conflict.txt
@@ -1,3 +1,3 @@
 aaa
-bbb
+ddd
 ccc
```

ファイル指定の場合は消えたブランチ上で`git log -p -m --first-parent -- conflict.txt`で確認できた。これで１ヶ月前にコンフリクト解消でミスった履歴も追える！

## まとめ
**なぜか**入れたはずの差分が見つけられず、GithubのHistoryにも`git log -p` でも見つけられない場合は以下を試してみる。

`git log -p -m --first-parent -- <target file>`
`git log -p -m`
`git log -p -c -- <target file>`
`git show -m <target hash>`