这是在 Bash 中完成的方式,无需使用外部正则表达式解析器:
# Read reference name path in an array splitting entries by /
IFS=/ read -ra refname < <(
# Obtain full branch reference path that contains this sha
git branch --format='%(refname)' --contains="$sha"
)
# Branch name is the last array element
branchname="${refname[-1]}"
printf 'The git branch name for sha: %s\nis: %s\n' "$sha" "$branchname"
或者仅使用 POSIX-shell 语法:
# Read reference path
refname=$(
# Obtain full branch reference path that contains this sha
git branch --format='%(refname)' --contains="$sha"
)
# Trim-out all leading path to get only the branch name
branchname="${refname##*/}"
printf 'The git branch name for sha: %s\nis: %s\n' "$sha" "$branchname"
编辑:
正如Philippe 提到 --format='%(refname:short)
的,将直接返回没有路径的分支名称,从而无需进一步处理以从完整引用路径中提取它。
branchname=$(git branch --format='%(refname:short)' --contains="$sha")