Compter le nombre de commits sur une twig Git

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

Comment puis-je compter le nombre de commits le long d’une twig sans compter sur cette hypothèse?

En SVN, c’est sortingvial, mais pour une raison quelconque, il est vraiment difficile de comprendre dans git.

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

git rev-list --count HEAD 

pour une twig

 git rev-list --count  

Si vous voulez compter les commits sur une twig qui ont été créés depuis la création de la twig

 git rev-list --count HEAD ^ 

Cela comptera également tous les commits qui ne sont pas sur le nom de la twig.

Exemples

 git checkout master git checkout -b test  git rev-list --count HEAD ^master 

Résultat: 3

Si votre twig vient d’une twig appelée develop :

 git checkout develop git checkout -b test  git rev-list --count HEAD ^develop 

Résultat: 3

Ignorer les fusions

Si vous fusionnez une autre twig dans la twig actuelle sans avance rapide et que vous effectuez les opérations ci-dessus, la fusion est également comptabilisée. C’est parce 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 

cette ligne

 git shortlog -s -n 

va générer une sortie comme ça

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

Cela pourrait 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 twig en cours ayant sa base sur master.

La commande dans la réponse de Peter, git rev-list --count HEAD ^develop inclut beaucoup plus de commits, 678 vs 97 sur mon projet actuel.

Mon historique de commit est linéaire sur cette twig, 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 twig?”.

Que diriez-vous de git log --pretty=oneline | wc -l git log --pretty=oneline | wc -l

Cela devrait compter tous les commits du sharepoint vue de votre twig actuelle.

J’aime faire git shortlog -s -n --all . Vous donne une liste de noms de “classement” et le nombre de commits.

Une façon de le faire est de répertorier le journal de votre succursale et de compter les lignes.

 git log  --oneline | wc -l 

Combien de commits ont été effectués sur la twig en cours depuis le début de l’historique, sans compter les commits des twigs fusionnées:

 git rev-list HEAD --count --first-parent 

De la documentation git rev-list –help :

--first-parent

Suivez uniquement le premier parent qui s’engage en voyant une validation de fusion. Cette option peut donner une meilleure vue d’ensemble de l’évolution d’une twig de sujet particulière, car les fusions dans une twig de sujet ont tendance à s’adapter uniquement aux mises à jour en amont, et cette option vous permet d’ignorer les modifications apscopes à votre histoire par une telle fusion. Ne peut pas être combiné avec –bisect.

nombre de commits effectués depuis un autre commit:

 git rev-list HEAD abc0923f --count --first-parent 

ou les mêmes:

 git rev-list abc0923f.. --count --first-parent 

ou utilisez toute autre référence git :

 git rev-list master tag-v20 --count --first-parent 

Remarque: le clone peu profond réduit la taille de l’historique. Par exemple, si vous --depth 1 avec --depth 1 , vous retournerez 1.


Nombre de commits effectués en 2018

 git rev-list HEAD --count --first-parent --since=2018-01-01 

01-01-2018, 01.01.2018, 2018.01.01 fonctionne également.

Vous pouvez aussi faire git log | grep commit | wc -l

et récupérer le résultat

Eh bien, la réponse sélectionnée ne fonctionne pas si vous avez créé une twig de twig non spécifique (c’est-à-dire non master ou develop ).

Ici, je propose une autre façon que j’utilise dans mes crochets pre-push git.

 # Run production build before push echo "[INFO] run .git/hooks/pre-push" echo "[INFO] Check if only one commit" # file .git/hooks/pre-push currentBranch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,') gitLog=$(git log --graph --abbrev-commit --decorate --first-parent HEAD) commitCountOfCurrentBranch=0 startCountCommit="" baseBranch="" while read -r line; do # if git log line started with something like "* commit aaface7 (origin/BRANCH_NAME)" or "commit ae4f131 (HEAD -> BRANCH_NAME)" # that means it's on our branch BRANCH_NAME matchedCommitSubssortingng="$( [[ $line =~ \*[[:space:]]commit[[:space:]].*\((.*)\) ]] && echo ${BASH_REMATCH[1]} )" if [[ ! -z ${matchedCommitSubssortingng} ]];then if [[ $line =~ $currentBranch ]];then startCountCommit="true" else startCountCommit="" if [[ -z ${baseBranch} ]];then baseBranch=$( [[ ${matchedCommitSubssortingng} =~ (.*)\, ]] && echo ${BASH_REMATCH[1]} || echo ${matchedCommitSubssortingng} ) fi fi fi if [[ ! -z ${startCountCommit} && $line =~ ^\*[[:space:]]commit[[:space:]] ]];then ((commitCountOfCurrentBranch++)) fi done <<< "$gitLog" if [[ -z ${baseBranch} ]];then baseBranch="origin/master" else baseBranch=$( [[ ${baseBranch} =~ ^(.*)\, ]] && echo ${BASH_REMATCH[1]} || echo ${baseBranch} ) fi echo "[INFO] Current commit count of the branch ${currentBranch}: ${commitCountOfCurrentBranch}" if [[ ${commitCountOfCurrentBranch} -gt 1 ]];then echo "[ERROR] Only a commit per branch is allowed. Try run 'git rebase -i ${baseBranch}'" exit 1 fi 

Pour plus d'parsings, visitez mon blog