1. ホーム
  2. ギット

[解決済み】Gitで2つのコミット間で変更された行数を計算するにはどうすればよいですか?

2022-03-23 17:51:07

質問

Git で、二つのコミット間で変更された行数を簡単に計算する方法はありますか?

をすればいいのは知っています。 git diff しかし、これは面倒なことです。また、自分のコミットだけを行数に含めるにはどうしたらいいのか知りたいです。

どのように解決するのですか?

を使用する必要があります。 --stat オプションの git diff または、スクリプトでこれをパースする場合は --numstat オプションで指定します。

git diff --stat <commit-ish> <commit-ish>

--stat は、マージ後に見慣れた人間が読めるような出力を生成します。 --numstat は、スクリプトが容易に解釈できる美しいテーブルレイアウトを生成します。

複数のコミットに対して同時にこの作業を行おうとしていることを見逃していました。 git log . Ron DeVeraはこのことに触れていますが、実際には彼が言及したこと以外にも多くのことが可能です。というのも git log は、要求された情報を表示するために内部で diff 機構を呼び出すので、diff の stat オプションをすべて指定することができます。 --shortstat . 使用したいのは、次のようなものです。

git log --author="Your name" --stat <commit1>..<commit2>

を使用することができます。 --numstat または --shortstat と同様です。 git log は他にもさまざまな方法でコミットを選択することができます。 ドキュメント . のようなものに興味があるかもしれません。 --since (コミット範囲を指定するのではなく、先週からのコミットを選択するだけ) と --no-merges (マージコミットは実際には変更を導入しません)、また、きれいな出力オプション ( --pretty=oneline, short, medium, full... ).

これは、git log からコミットごとの変更ではなく、全体の変更を取得するためのワンライナーです (必要に応じてコミット選択オプションを変更します - これは、commit1 から commit2 までの自分によるコミットです)。

git log --numstat --pretty="%H" --author="Your Name" commit1..commit2 | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("+%d, -%d\n", plus, minus)}'

(コミットに関する識別情報を git log に出力させる必要があります。私は任意にハッシュを選び、awk を使って三つのフィールドを持つ行だけを選び出しました。)