How can I find the number of commits between two commitishes in git?
Additionally, is there some way that I could do the same with any project on GitHub (using the UI, not the API)?
How can I find the number of commits between two commitishes in git?
Additionally, is there some way that I could do the same with any project on GitHub (using the UI, not the API)?
 
    
    Before I give you an answer, consider this commit graph:
        o -----------
       /             \
... - A - o - o - o - B
       \         /
        o ----- o
Each o represents a commit, as do A and B (they're just letters to let us talk about specific commits).  How many commits are there between commits A and B?
That said, in more linear cases, just use git rev-list --count A..B and then decide what you mean by "between" (does it include B and exclude A? that's how git rev-list --count will behave).  In branchy cases like this, you'll get all the commits down all the branches; add --first-parent, for instance, to follow just the "main line".
(You also mentioned "commitish", suggesting that we might have annotated tags.  That won't affect the output from git rev-list, which only counts specific commits.)
Edit: Since git rev-list --count A..B includes commit B (while omitting commit A), and you want to exclude both end-points, you need to subtract one.  In modern shells you can do this with shell arithmetic:
count=$(($(git rev-list --count A..B) - 1))
For instance:
$ x=$(($(git rev-list --count HEAD~3..HEAD) - 1))
$ echo $x
2
(this particular repo has a very linear graph structure, so there are no branches here and there are two commits "between" the tip and three-behind-the-tip).  Note, however, that this will produce -1 if A and B identify the same commit:
$ x=$(($(git rev-list --count HEAD..HEAD) - 1))
$ echo $x
-1
so you might want to check that first:
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
 
    
    $ git log 375a1..58b20 --pretty=oneline | wc -l
Specify your start commit followed by your end commit, and then count the lines.  That should be the count of commits between those two commit ranges.  Use the --pretty=oneline formatting so that each commit takes up a single line.
Note that using two dots (375a1..58b20) is different than using three dots (375a1...58b20); see What are the differences between double-dot “..” and triple-dot “…” in Git commit ranges? for more information about this and to figure out which one you want to use.
As for the GUI in GitHub, I don't know of a way to accomplish this same task. But that should be trivial, as the above is the possible way to do it directly using Git and Bash.
 
    
     
    
    git rev-list newer ^older --pretty=oneline --count
git rev-list db8fb95e6256bd52a668bae82d8b5a73152869fa ^1aeae117c58c173fee9cb3550297498142887aa5 --pretty=oneline --count
 
    
    commit ranges can fail on a broken repo:
$ git rev-list --count b00aa8ded74..master
error: Could not read 29026cc404895cc9f9afa55c4e2d53b7a4a5a319
fatal: revision walk setup failed
$ git log --oneline b00aa8ded74..master | wc -l
error: Could not read 29026cc404895cc9f9afa55c4e2d53b7a4a5a319
fatal: revision walk setup failed
alternative: git log and grep
depth=$(git log --format=%H $rev2 | grep -m1 -n -x $rev1 | cut -d: -f1)
grep -m1 will stop git log after the first match, so there is no error
