Как я могу найти количество коммитов между двумя фиксациями в git
?
Кроме того, есть ли способ, которым я мог бы сделать то же самое с любым проектом в GitHub (используя интерфейс, а не API)?
Как я могу найти количество коммитов между двумя фиксациями в git
?
Кроме того, есть ли способ, которым я мог бы сделать то же самое с любым проектом в GitHub (используя интерфейс, а не API)?
Прежде чем дать вам ответ, рассмотрите этот график фиксации:
o -----------
/ \
... - A - o - o - o - B
\ /
o ----- o
Каждый o
представляет собой фиксацию, как и 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
(при отсутствии фиксации A
), и вы хотите исключить оба конца, вам нужно вычесть его. В современных оболочках вы можете сделать это с помощью арифметики оболочки:
count=$(($(git rev-list --count A..B) - 1))
Например:
$ x=$(($(git rev-list --count HEAD~3..HEAD) - 1))
$ echo $x
2
(этот конкретный репо имеет очень линейную структуру графа, поэтому здесь нет ветвей, и между двумя концами и двумя зацепками есть две коммиты. Обратите внимание, однако, что это будет производить -1, если A
и B
идентифицировать одно и то же commit:
$ 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
$ git log 375a1..58b20 --pretty=oneline | wc -l
Укажите начальную фиксацию, за которой следует конечная фиксация, а затем подсчитайте строки. Это должно быть количество фиксаций между этими двумя диапазонами фиксации. Используйте форматирование --pretty=online
, чтобы каждая фиксация занимала одну строку.
Что касается GUI в GitHub, я не знаю, как выполнить эту задачу. Но это должно быть тривиально, так как выше это возможный способ сделать это непосредственно в Git Bash.