自分が入れたはずの修正が消えていて、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>