ウェブサイト検索

最近のGitコミット変更を検索する方法


コードベースにいつどこでコード行が追加されたかを追跡するのは頭が痛いことですが、Gitはすべての変更履歴を保存しており、コミットの差分を検索するためのいくつかのツールも備えています。これらを使って、特定の検索文字列に一致する行を見つけることができます。

Gitログを使用する

残念ながら、GitHubのようなサイトはこの機能を提供していないため、あなたは使用しなければなりません

git log

このコマンドには多くのパラメータがあり、コミットの差分を検索することもできますが、出力の扱いは少し扱いにくいです。

いずれにせよ、Gitのインタラクティブページャーの表示は多くの人にとってかなり使いにくいので、コマンドバーで検索することをお勧めします。

/Search

、または出力を直接コンソールにパイプすることによって、

| cat

またはファイルに

> log.txt

より効果的に検索できる場所で。

この種の検索をリポジトリ全体で実行すると、非常に大きな出力が生成される可能性があります。特定の期間内のコミットを表示したい場合は、次のようにできます。

--after

と

--before

「日付」や「2週間」、「3ヶ月」のような相対的な日付を受け取るコマンドです。次のコマンドは、1ヶ月半より古いコミットを無視し、非常に最近のコミットも無視します。

git log --after="6 week" --before="1 week"

特定の検索文字列を含むコミットを知りたいだけであれば、-Sを使うことができます。この場合、検索文字列をその後ろに空白なしで付ける必要があります。

git log --after="6 week" -S'Dictionary' --stat

この出力でファイルを表示したい場合は、-p フラグを使用できます:

git log --after="6 week" -S'Dictionary' --stat -p | cat

しかし、この出力は大きなクエリに対しては膨大であり、IDEで開くだけとはあまり変わりません。それを解決するためには、grepとsedを使う必要がありますが、残念ながらコマンドは複雑になります。

スマートなマッチングのためのsedの使用

ファイル内の実際の行を一致させて印刷するには、grepを使用し、出力をそれにパイプしてパターンが見つかった行を印刷する必要があります。これにはパターンを二度タイプする必要があります:

git log --after="6 week" -S'Dictionary' --stat -p | grep 'Dictionary'

しかし、これには問題があります - コミットメッセージやIDがもはや含まれていません。これを修正するためには、sedを使う必要があります。

SEARCH=Dictionary && git log --after="6 week" -S$SEARCH --stat -p | sed -n "/commit/,/diff/p; /$SEARCH/p"

このコマンドは、検索用語を二度入力するのが面倒なので、SEARCH変数を設定します。git log --stat -pを実行し、完全な出力を表示しますが、これはsedに渡されて解析されます。sedは「commit」と「diff」の間のすべての行にマッチし、--statヘッダーの出力を取得します。次に、マッチした行を追加して、実際に使用可能な出力を生成します。

おそらくGit Blameを使った方が良いでしょう

上記の例は、コードベース全体を検索するのに適しています。しかし、どのファイルが影響を受けているかを知っていて、その履歴を理解したいだけであれば、git blameを使用することをお勧めします。

Git-blame はファイル全体を表示しますが、各行に最後に修正した人を注釈として付けます。これにより、変更を迅速に追跡でき、多くの場合、同僚に責任を負わせることができます。

あなたは git blame コマンドを使用できますが、GitHubにはそれに対する優れたGUIがあり、問題のファイルをクリックして「Blame」を押すことで利用できます。

同じインターフェースからファイルの時系列履歴を表示できることに注意してください。Git blameはそれをすべて1つの出力に凝縮します。

関連記事: