-
git の履歴を柔軟に検索する
- 2021年1月29日
- Git
git の履歴検索における tips です。
差分にある文字列が存在するコミットの検索
文字列 hoge が差分に存在するコミットを探すには、-S オプションを使います。
$ git log -Shoge正規表現を利用する
正規表現を使いたい場合、-G オプションが利用できます。1
以下は文字列 foo か bar が差分に存在するコミットを検索する例です。
$ git log -G'foo|bar'
検索文字列が追加・削除・変更されたコミットをみつける
やや特殊なケースですが、検索文字列自体が追加・削除・変更されたコミット を表示したいケースでは、 --pickaxe-all や --pickaxe-regex オプションを利用します。
ドキュメント に、次のようなサンプルがあります。
+ return frotz(nitfol, two->ptr, 1, 0);
...
- hit = frotz(nitfol, mf2.ptr, 1, 0);この差分を含むコミットは、git log -G"frotz\(nitfol" では検索できますが、git log -S"frotz\(nitfol" --pickaxe-regex では検索できません。
なぜなら、検索対象パターンとなる frotz(nitfol という 文字列自体の出現回数が変わった(文字列が変更された)わけではない からです。
ある範囲の検索を行う
あるソースコードの特定範囲だけを検索したい 場合は、-L オプションを利用できます。このオプションは、複数回指定できます。
行番号の指定
foo.js の 10 行目から 15 行目までの差分履歴は、次のように表示できます。
$ git log -L10,15:foo.js-L オプションを利用した場合、デフォルトで --patch オプション 2 3 も有効化されます。
上の例では、始まり から 終わり までの行番号を絶対値で入力しましたが、 終わり の行番号は 相対値(オフセット)で入力することもできます。
$ git log -L10,+5:foo.js負の値も指定可能です。
$ git log -L15,-5:foo.js正規表現での範囲指定
-L オプションは正規表現も利用できます。hoge で始まる行から、空行までを検索範囲としたい場合、次のようになります。
$ git log -L'/^hoge/,/^$/:foo.js'関数の履歴
ある関数 hoge_func 内の履歴だけ知りたい場合は、次のように :hoge_func と指定します。
$ git log -L':hoge_func:foo.js'言語によって関数はうまく認識できないことがあります。
この場合前述のように正規表現を利用するか、hunc-header の設定 を行ってください。
参考
この記事を書いた人 : 上田直諒
AWS bluebird css CSV docker docker compose electron ES6 es2015 Git Heroku ITコンサルティング JavaScript justinmind less MongoDB Node.js php PostgreSQL Private Space Promise React react-router reactjs Salesforce scss Selenium Builder selenium IDE Selenium WebDriver stylus TypeScript VirtualBox VisualStudioCode vue vuejs webpack システム開発プロジェクト セキュリティ ワイヤーフレーム 上流工程 卒FIT 帳票 要件定義 設計 電力小売業界