正则表达式查找最新的合并分支名称

Regex to find the latest merged branch name

我正在尝试查找合并到 master 分支中的最新分支的名称。除 master 之外的所有其他分支都以 testBranch/<version of release>

模式命名

所以我使用这个命令来获取整个分支列表:

git branch -a --merged master
outputs: 
 remotes/origin/testBranch/1.2.0
 remotes/origin/testBranch/1.1.0
 remotes/origin/master

然后正在考虑一个正则表达式来使用 'grep' 获取最新的分支名称。例如:

git branch -r --merged master | grep <pattern>

我已经在正则表达式测试器中在线测试了这个:

(origin\/testBranch\/[0-9]+\.[0-9]+\.[0-9]+){1}
(origin\/testBranch\/[0-9]+\.[0-9]+\.[0-9]+)*?

似乎无法正常工作。在其他一些试验中,我得到了两条线:

remotes/origin/testBranch/1.2.0
remotes/origin/testBranch/1.1.0

我需要的是输出第一次出现的:

remotes/origin/testBranch/<release version>
So in above example, should output: 
remotes/origin/testBranch/1.2.0

请帮忙。谢谢。

我建议使用 GNU sort:

git branch -a --merged master | sort -Vr | head -n 1

输出:

 remotes/origin/testBranch/1.2.0

如果您想使用正则表达式,可以使用像这样的表达式 (remotes\/origin\/testBranch\/\d\.\d\.\d),它只会匹配第一次出现的地方。参考 jad 的回答,您也可以只使用 git branch -a --merged master |grep remote|head -1 而不是正则表达式。

与其执行复杂的正则表达式,不如获取输出的最上面一行,例如:

git branch -a --merged master | head -1

如果只想获取合并后的远程分支,可以使用 grep https://www.gnu.org/software/grep/manual/grep.html 只提取远程分支:

git branch -a --merged master | grep -i remote | head -1

如果您要从行中提取特定信息,例如“remotes/”之后甚至“origin/”之后的所有内容,您可以使用 awksed 来删除您不想要的单词,例如:

git branch -a --merged master | grep -i remote | sed 's/remotes\///;s/origin\///' | head -1

或者可能更整洁,使用 awk:

git branch -a --merged master | awk '/remote/ {gsub("(remotes|origin)/",""); print; exit}'