Count the number of commits on a Git branch

后端 未结 12 1108
[愿得一人]
[愿得一人] 2020-12-02 04:28

I found this answer already: Number of commits on branch in git but that assumes that the branch was created from master.

How can I count the number of commits along

12条回答
  •  盖世英雄少女心
    2020-12-02 05:16

    Well, the selected answer doesn't work if you forked your branch out of unspecific branch (i.e., not master or develop).

    Here I offer a another way I am using in my pre-push git hooks.

    # 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
    
        matchedCommitSubstring="$( [[ $line =~ \*[[:space:]]commit[[:space:]].*\((.*)\) ]] && echo ${BASH_REMATCH[1]} )"
    
        if [[ ! -z ${matchedCommitSubstring} ]];then
    
          if [[  $line =~ $currentBranch ]];then
            startCountCommit="true"
          else
            startCountCommit=""
    
            if [[ -z ${baseBranch} ]];then
              baseBranch=$( [[ ${matchedCommitSubstring} =~ (.*)\, ]] && echo ${BASH_REMATCH[1]} || echo ${matchedCommitSubstring} )
    
            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
    

    For more analysis, please visit my blog

提交回复
热议问题