内の 2 つのコミット間のコミット数を調べるにはどうすればよいでしょうかgit
?
さらに、GitHub 上の任意のプロジェクトで同じことを実行する方法はありますか (API ではなく UI を使用)?
ベストアンサー1
答えを出す前に、次のコミット グラフを検討してください。
o -----------
/ \
... - A - o - o - o - B
\ /
o ----- o
それぞれはo
コミットを表し、doとA
(B
これらは単に私たちが話せるようにするための文字です)特定のA
コミット )。 コミットとの間にはコミットがいくつありますかB
?
とはいえ、より直線的なケースでは、 を使用しgit rev-list --count A..B
、次に「間」の意味を決定します (B が含まれ、A が除外されますか? それが のgit rev-list --count
動作です)。このような分岐のあるケースでは、すべてのブランチのすべてのコミットが取得されます。--first-parent
たとえば、 を追加すると、「メイン ライン」だけをたどります。
(また、「commitish」についても言及されており、注釈付きのタグがあるかもしれないことを示唆しています。これは、特定のコミットのみをカウントする からの出力には影響しませんgit rev-list
。)
編集: git rev-list --count A..B
commit が含まれているためB
( commit は省略A
)、両方のエンドポイントを除外したい場合は、1 を減算する必要があります。最新のシェルでは、シェル演算を使用してこれを行うことができます。
count=$(($(git rev-list --count A..B) - 1))
例えば:
$ x=$(($(git rev-list --count HEAD~3..HEAD) - 1))
$ echo $x
2
(このリポジトリは非常に直線的なグラフ構造を持っているため、ここにはブランチはなく、先端と先端から3つ後ろの間に2つのコミットがあります)。ただし、これは-1を生成することに注意してA
くださいB
。同じ専念:
$ x=$(($(git rev-list --count HEAD..HEAD) - 1))
$ echo $x
-1
まずは次の点を確認してください:
count=$(git rev-list --count $start..$end)
if [ $count -eq 0 ]; then
... possible error: start and end are the same commit ...
else
count=$((count - 1))
fi