LoginSignup
16
13

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-05-04

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

問題の状況を作る

元ファイル

aaa
bbb
ccc

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

aaa
ddd
ccc

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

aaa
eee
ccc

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

git checkout master
git merge develop
@@@ -1,3 -1,3 +1,7 @@@
  aaa
++<<<<<<< HEAD
 +ddd
++=======
+ eee
++>>>>>>> develop

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

aaa
eee
ccc

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

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

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

$ 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^ で消えたことは確認できるんですが、これが1ヶ月前の出来事とかだと、どこで消えたのか特定するのが困難です。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で確認できた。これで1ヶ月前にコンフリクト解消でミスった履歴も追える!

まとめ

なぜか入れたはずの差分が見つけられず、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>

16
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
13