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

Количество фиксаций на ветке в git

Я пишу небольшой script и хочу знать, сколько коммитов я сделал в текущей ветке с момента ее создания.

В этом примере у меня было бы 2 фиксации на child:

git checkout master
git checkout -b child
...
git commit -a
...
git commit -a

Так что я хочу

commit_number = ...
echo $commit_number

Благодарим вас за помощь.

4b9b3361

Ответ 1

Git может предоставить вам количество коммитов без дополнительных сценариев оболочки.

git rev-list master.. --count

rev-list (указанный в git help -a) используется для работы с ревизиями.

Так как master.. перечислит коммиты от базы master и текущей ветки до текущей ветки, --count подсчитает их количество.

Если вместо этого вы хотите иметь количество коммитов между двумя ревизиями, вы должны использовать master... Для уточнения: между именем мастера и последним общим предком мастера и текущей ветвью (HEAD) и снова до текущей ветки. Если вы визуализируете историю коммитов в виде дерева, вы сможете следовать двум ветвям от общего предка. master.. с другой стороны просто посчитает одну из двух ветвей.

То есть, хотите ли вы использовать master.. или master... зависит от того, хотите ли вы узнать, сколько коммитов вы сделали в своей ветке с момента его разделения (master..), или разницу между текущим master и веткой, количество коммитов в master и ветке с момента ветки ветки.

Ответ 2

Предполагая, что вы разветвлены от мастера, master..yourbranch дает вам диапазон коммитов, находящихся в yourbranch, но не в главном.

Затем вам просто нужно перечислить их по одной строке и подсчитать количество строк:

git log master..yourbranch --pretty=oneline | wc -l

Ответ 3

Обновить: git rev-list теперь имеет --count:

git rev-list --count master..

Со старыми версиями git:

git rev-list master.. |wc -l

rev-list перечисляет ревизии, а master.. относится к фиксации, поскольку текущий HEAD отклоняется от master.

Ответ 4

Если вы хотите узнать, сколько коммитов сделали вы или кто-либо еще, начиная с вашей текущей HEAD, вы можете сделать:

git shortlog -sn

Пример вывода:

   490  Donald Duck
   312  Some Developer
   274  John Doe
   144  Jane Doe
     5  Leet Hacker