ソースコードを追いかけていると、昔ここにあった、なかったというコードについて思いを馳せる必要があり、どのコミットで、どういう経緯で追加/削除されたのか知りたいという場面に出くわすことがある。 この場合、次のコマンドで検索文字列に掛かるコミットを検索することができる。
$ git log -S "検索文字列"
-S
については、次の Git Log Searching
の項で解説されている。
Git Log Searching
Perhaps you’re looking not for where a term exists, but when it existed or was introduced. The git log command has a number of powerful tools for finding specific commits by the content of their messages or even the content of the diff they introduce.
If, for example, we want to find out when the ZLIB_BUF_MAX constant was originally introduced, we can use the -S option (colloquially referred to as the Git “pickaxe” option) to tell Git to show us only those commits that changed the number of occurrences of that string.
こんな具合に出力を得られる。
[13:06:28] tomoya_shibata@BPS-MBP ~/Git/demo_dir master|✓ $ git log -S "something code" commit 27091d3adddcbc2431ba535a5e05e71e79bbb438 (HEAD -> master) Author: tomoyashibata <dummy@example.com> Date: Fri Jul 17 13:05:21 2020 +0900 5a5c2ea で追加したコードはいらなくなったので削除した commit 5a5c2ea746fdc14c54f3ad0b4a45bae91fd72145 Author: tomoyashibata <dummy@example.com> Date: Fri Jul 17 13:04:32 2020 +0900 何かのコードを追加した
関連するコミットは得られたけれど差分も眺めたい。
そういうときは -p
を加える。
$ git log -p -S "検索文字列"
出力はこう。
[13:06:26] tomoya_shibata@BPS-MBP ~/Git/demo_dir master|✓ $ git log -p -S "something code" commit 27091d3adddcbc2431ba535a5e05e71e79bbb438 (HEAD -> master) Author: tomoyashibata <dummy@example.com> Date: Fri Jul 17 13:05:21 2020 +0900 5a5c2ea で追加したコードはいらなくなったので削除した diff --git a/something.txt b/something.txt index c9910de..e69de29 100644 --- a/something.txt +++ b/something.txt @@ -1 +0,0 @@ -something code \ No newline at end of file commit 5a5c2ea746fdc14c54f3ad0b4a45bae91fd72145 Author: tomoyashibata <dummy@example.com> Date: Fri Jul 17 13:04:32 2020 +0900 何かのコードを追加した diff --git a/something.txt b/something.txt new file mode 100644 index 0000000..c9910de --- /dev/null +++ b/something.txt @@ -0,0 +1 @@ +something code \ No newline at end of file