231 votes

Compter le nombre de commits sur une branche Git

J'ai déjà trouvé cette réponse : Nombre de commits sur la branche dans git mais cela suppose que la branche a été créée à partir de master.

Comment puis-je compter le nombre de commits le long d'une branche ? sans en se basant sur cette hypothèse ?

Dans SVN, c'est trivial, mais pour une raison quelconque, c'est vraiment difficile à comprendre dans git.

1 votes

434voto

Peter van der Does Points 3926

Pour compter les commits de la branche sur laquelle vous vous trouvez :

git rev-list --count HEAD

pour une branche

git rev-list --count <branch-name>

Si vous voulez compter les commits sur une branche qui ont été faits depuis que vous avez créé la branche

git rev-list --count HEAD ^<branch-name>

Cela comptera tous les commits jamais faits qui ne sont pas sur la branche-nom aussi bien.

Ejemplos

git checkout master
git checkout -b test
<We do 3 commits>
git rev-list --count HEAD ^master

Résultat : 3

Si votre branche provient d'une branche appelée develop :

git checkout develop
git checkout -b test
<We do 3 commits>
git rev-list --count HEAD ^develop

Résultat : 3

Ignorer les fusions

Si vous fusionnez une autre branche dans la branche actuelle sans avance rapide et que vous faites ce qui précède, la fusion est également comptabilisée. Ceci est dû au fait que pour git une fusion est un commit.

Si vous ne voulez pas compter ces commits, ajoutez --no-merges :

git rev-list --no-merges --count HEAD ^develop

10 votes

Aucun de ces éléments n'indique le bon nombre, par exemple master et branchname indiquent le même nombre de commits.

0 votes

Les commentaires ne permettent pas vraiment de coder, mais ceci devrait montrer que ça fonctionne. ==== $ git init ==== $ touch test.txt ==== $ git add . ==== $ git commit -a ==== $ git rev-list --count HEAD => 1 ==== $ git rev-list --count master => 1 ==== $ git checkout -b test ==== $ git rev-list --count test => 1 ==== $ git rev-list --count HEAD ^master => 0 ==== $ touch test2. txt ==== $ git add . ==== $ git commit -a ==== $ git rev-list --count master => 1 ==== $ git rev-list --count test => 2 ==== $ git rev-list --count HEAD ^master => 1 ====

1 votes

Je suis d'accord avec @botbot. Ceux-ci ne sont pas vraiment précis. Par exemple, essayez d'ajouter quelques merge commits ou pull/rebase et remarquez que les comptes tels que décrits ci-dessus commencent à devenir peu fiables.

66voto

Asnad Atta Points 380

Pour voir le nombre total de commits, vous pouvez faire comme Peter l'a suggéré ci-dessus.

git rev-list --count HEAD

Et si vous voulez voir le nombre de commits effectués par chaque personne, essayez cette ligne

git shortlog -s -n

générera une sortie comme celle-ci

135  Tom Preston-Werner
15  Jack Danger Canty
10  Chris Van Pelt
7  Mark Reid
6  remi

3 votes

Que sont ces chiffres avant les noms ? pouvez-vous expliquer ?

5 votes

@Ciastopiekarz il s'agit du nombre de commits par chaque personne.

43voto

scanny Points 1415

Cela peut nécessiter une version relativement récente de Git, mais cela fonctionne bien pour moi :

git rev-list --count develop..HEAD

Cela me donne un compte exact des commits dans la branche actuelle ayant sa base sur master.

Le commandement dans la réponse de Pierre, git rev-list --count HEAD ^develop comprend beaucoup plus de commits, 678 contre 97 sur mon projet actuel.

L'historique de mes commits est linéaire sur cette branche, donc YMMV, mais cela me donne la réponse exacte que je voulais, à savoir "Combien de commits ai-je ajouté jusqu'à présent sur cette branche de fonctionnalité ?".

0 votes

Cela devrait être la même chose. Le site Les documents le disent . 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

0 votes

Je suis confus : git fetch upstream; BEHIND=$(git rev-list --count HEAD..upstream/master); git merge --ff-only upstream/master~$BEHIND; ne s'aligne pas. BEHIND est comme 1800 alors qu'en réalité rien de plus que merge upstream/master~400 ne produit de changements. en utilisant --no-merges n'est pas beaucoup mieux, donne environ 900. Et si je fais une fusion comme ça avec ~800, et que le nombre de rev-list est de 1800, puis je fais une fusion avec ~790, j'obtiens entre 6 et 28 de moins dans la rev-list.

5voto

Remear Points 1635

Et si git log --pretty=oneline | wc -l

Cela devrait compter tous les commits du point de vue de votre branche actuelle.

0 votes

Quelle colonne comptez-vous ? Est-ce la première ?

2voto

kjw0188 Points 2236

Une façon de le faire est de lister le journal de votre branche et de compter les lignes.

git log <branch_name> --oneline | wc -l

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X