Подтвердить что ты не робот

Количество обязательств между двумя командами

Как я могу найти количество коммитов между двумя фиксациями в git?

Кроме того, есть ли способ, которым я мог бы сделать то же самое с любым проектом в GitHub (используя интерфейс, а не API)?

4b9b3361

Ответ 1

Прежде чем дать вам ответ, рассмотрите этот график фиксации:

        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

Ответ 2

$ git log 375a1..58b20 --pretty=oneline | wc -l

Укажите начальную фиксацию, за которой следует конечная фиксация, а затем подсчитайте строки. Это должно быть количество фиксаций между этими двумя диапазонами фиксации. Используйте форматирование --pretty=online, чтобы каждая фиксация занимала одну строку.

Что касается GUI в GitHub, я не знаю, как выполнить эту задачу. Но это должно быть тривиально, так как выше это возможный способ сделать это непосредственно в Git Bash.