Functions/Get-IBHGitBehindBy.ps1

<#
    .SYNOPSIS
        Check if the git local repository is behind of the origin repository.
 
    .DESCRIPTION
        Return the number of commits behind of the origin repository. It will
        return 0, if we are not behind.
 
    .OUTPUTS
        System.Int32. Number of commits behind.
 
    .EXAMPLE
        PS C:\> Get-IBHGitBehindBy
        Return the number of commits behind by the origin repository.
 
    .LINK
        https://github.com/claudiospizzi/InvokeBuildHelper
#>

function Get-IBHGitBehindBy
{
    [CmdletBinding()]
    [OutputType([System.Int32])]
    param
    (
        # Root path of the git repository.
        [Parameter(Mandatory = $false)]
        [System.String]
        $Path
    )

    try
    {
        # Switch to the desired location, if specifed
        if ($PSBoundParameters.ContainsKey('Path'))
        {
            $locationStackName = [System.Guid]::NewGuid().Guid
            Push-Location -Path $Path -StackName $locationStackName
        }

        $status = git -c core.quotepath=false -c color.status=false status -uno --short --branch
        $status = $status -join "`n"

        $behindBy = 0
        if ($status -match '\[(?:ahead (?<ahead>\d+))?(?:, )?(?:behind (?<behind>\d+))?(?<gone>gone)?\]')
        {
            if ($null -ne $Matches -and $Matches.Keys -contains 'behind')
            {
                $behindBy = [System.Int32] $Matches['behind']
            }
        }

        return $behindBy
    }
    finally
    {
        # Go back to the original location
        if ($PSBoundParameters.ContainsKey('Path'))
        {
            Pop-Location -StackName $locationStackName
        }
    }
}