如何可靠地解析git branch输出以仅捕获分支名称?

时间:2019-04-30 20:48:19

标签: bash git

当推送到GitHub时,我正在运行自动化测试。

在设置测试仓库时,我可以运行:

git branch -a --contains <<commit id>>

检测提交可能存在的分支。

Git产生如下输出:

remotes/origin/MEM-5286-partner-video-update01
remotes/origin/MEM-5286-partner-video-update02

有人可以建议使用bash从输出字符串的末尾捕获分支名称(MEM-5286-partner-video-update01MEM-5286-partner-video-update02)的方法吗?

我可以用结果行加载bash数组,但是尝试使用sed和/或regex仅捕获分支名称已陷入困境。似乎没有git选项可以消除remotes / origin前缀。

我希望您对方法有任何想法。

2 个答案:

答案 0 :(得分:4)

您可以使用--format选项,该文档的文档位于for-each-ref下:

git branch -a --contains <commit_id> --format='%(refname:short)'

refname:short已在Git 1.6.1中引入。

答案 1 :(得分:1)

使用本地git。您可以在git-for-each-ref的联机帮助页中查看可以在此处的--format选项中使用的原子,但是简而言之,您可以请求refname(分支的最右边部分)名称)使用:

git branch -a --contains <<commit id>> --format "%(refname:lstrip=-1)"

(可选)使用awk(如果分支名称包含斜杠,则失败):

git branch -a --contains <<commit id>> | awk -F"/" '{print $NF}'

这会将输入行除以"/",然后打印最后一个字段print $NF