2つのコミット間のコミット数 質問する

2つのコミット間のコミット数 質問する

内の 2 つのコミット間のコミット数を調べるにはどうすればよいでしょうかgit?

さらに、GitHub 上の任意のプロジェクトで同じことを実行する方法はありますか (API ではなく UI を使用)?

ベストアンサー1

答えを出す前に、次のコミット グラフを検討してください。

        o -----------
       /             \
... - A - o - o - o - B
       \         /
        o ----- o

それぞれはoコミットを表し、doとABこれらは単に私たちが話せるようにするための文字です)特定の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..Bcommit が含まれているため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

おすすめ記事