Я уже нашел этот ответ: количество коммитов на ветке в git, но это предполагает, что ветка была создана из master.
Как я могу посчитать количество коммитов на ветке, не полагаясь на это предположение?
В SVN это тривиально, но по какой-то причине действительно сложно разобраться в git.
Ответы:
Чтобы подсчитать коммиты для вашей ветки:
для филиала
Если вы хотите сосчитать коммиты на ветке, которые были сделаны с момента создания ветки
Это будет учитывать все когда-либо сделанные коммиты, которые также не указаны в имени ветки.
Примеры
Результат: 3
Если ваша ветка имеет ветку с именем
develop
:Результат: 3
Игнорирование слияний
Если вы объединяете другую ветку с текущей веткой без ускоренной перемотки и выполняете вышеуказанные действия, слияние также считается. Это потому, что для git слияние - это коммит.
Если вы не хотите считать эти коммиты, добавьте
--no-merges
:источник
git log
, работают лучше, чем любые другие предложения.Чтобы увидеть общее количество коммитов, вы можете сделать, как Питер предложил выше
И если вы хотите увидеть количество коммитов, сделанных каждым человеком, попробуйте эту строку
будет генерировать вывод, как это
источник
Это может потребовать относительно недавней версии Git, но это хорошо работает для меня:
Это дает мне точное количество коммитов в текущей ветке, основанной на master.
Команда в ответе Питера
git rev-list --count HEAD ^develop
включает в себя еще много коммитов, 678 против 97 в моем текущем проекте.Моя история коммитов в этой ветке линейная, поэтому YMMV, но она дает мне точный ответ, который я хотел, а именно: «Сколько коммитов я добавил к этой ветке функций?».
источник
A special notation "<commit1>..<commit2>" can be used as a short-hand for "^'<commit1>' <commit2>". For example, either of the following may be used interchangeably: $ git rev-list origin..HEAD $ git rev-list HEAD ^origin
git fetch upstream; BEHIND=$(git rev-list --count HEAD..upstream/master); git merge --ff-only upstream/master~$BEHIND;
не выстраивается. BEHIND похож на 1800 год, когда на самом деле ничто иное, как слияние upstream / master ~ 400, не приводит к изменениям. использование--no-merges
не намного лучше, дает как 900. И если я делаю слияние как это с ~ 800, и счетчик списка оборотов равен 1800, то я делаю слияние с ~ 790, я получаю между 6 и 28 меньшим количеством оборотов -список.Сколько коммитов было сделано в текущей ветви с начала истории, не считая коммитов из объединенных ветвей:
Из документации git rev-list --help :
Примечание: мелкий клон уменьшит размер истории. Например, если вы клонируете
--depth 1
, вернет 1.количество коммитов, выполненных после некоторого другого коммита:
или то же самое:
или используйте любую другую ссылку на git :
Подсчет совершенных с 2018 года
01-01-2018, 01.01.2018, 2018.01.01 также работает.
git rev-label
Я написал скрипт для получения ревизии версии из Git в таком формате,
'$refname-c$count-g$short$_dirty'
который расширяется доmaster-c137-gabd32ef
.Помощь включена в сам скрипт.
источник
Как насчет
git log --pretty=oneline | wc -l
Это должно подсчитать все коммиты с точки зрения вашей текущей ветки.
источник
Мне нравится делать
git shortlog -s -n --all
. Дает вам список имен и количество коммитов в стиле «списка лидеров».источник
Один из способов сделать это - перечислить журнал для вашей ветви и подсчитать количество строк.
источник
Хорошо, выбранный ответ не будет работать, если вы разветвляли свою ветку из неопределенной ветви (то есть, нет
master
илиdevelop
).Здесь я предлагаю другой способ, которым я пользуюсь в своих
pre-push
git-хуках.Для более подробного анализа, пожалуйста, посетите мой блог
источник
Поскольку OP ссылается на число коммитов на ветке в git, я хочу добавить, что данные ответы там также работают с любой другой веткой, по крайней мере, начиная с git версии 2.17.1 (и, похоже, более надежно, чем ответ Питера ван дер Доу):
работает правильно:
Последняя команда дает нулевые коммиты, как и ожидалось, так как я только что создал ветку. Команда before дает мне реальное количество коммитов в моей ветке разработки минус merge-commit (s)
не работает правильно:
В обоих случаях я получаю количество всех коммитов в ветке разработки и мастер, с которого ветки (косвенно) спускаются.
источник
Если вы используете систему UNIX, вы можете сделать
источник
Вы также можете сделать git log | grep commit | туалет
и получить результат обратно
источник
git log
выводе, так что коммит будет засчитан дважды в результате. Еще хуже, если сообщение коммита будет содержать слово «коммит» дважды в двух отдельных строках.