这里有一个 git 存储库,它有多个分支,这些分支以相同的前缀开头,就像这样:
pfx.branchName1
pfx.branchName2
pfx.branchName3
...
所以问题是如何快速从所有分支中删除所有前缀("pfx.")并获得如下所示的内容:
branchName1
branchName2
branchName3
...
找到一个通用命令,用于搜索包含我们所需字符串的分支(例如"StringToFind"
),并通过将该部分替换为我们想要的字符串来重命名(例如"ReplaceWith"
):
git branch | grep "StringToFind" | awk '{original=$1; sub("StringToFind","ReplaceWith"); print original, $1}' | xargs -n 2 git branch -m
注意:在开始重命名之前,我们可以运行以下命令以查看将要重命名的分支(只是为了方便起见):
git branch | grep "StringToFind" | awk '{original=$1; sub("StringToFind","ReplaceWith"); print original, "->" , $1}'
因此,对于我们的情况,请使用它来删除前缀:
git branch | grep "pfx." | awk '{original=$1; sub("pfx.",""); print original, $1}' | xargs -n 2 git branch -m
这个,用于在删除之前进行检查:
git branch | grep "pfx." | awk '{original=$1; sub("pfx.",""); print original, "->", $1}'
可以从git branch
的输出中过滤分支名称, 然后使用带有替换的 Bash 循环来执行重命名:
git branch | sed -e 's/..//' | grep '^pfx.' | while read b; do git branch -m "$b" "${b#pfx.}"; done
或者稍微紧凑一些,但可能更难阅读:
git branch | sed -ne 's/^..pfx.//p' | while read b; do git branch -m "pfx.$b" "$b"; done