-
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 帳票 要件定義 設計 電力小売業界