这里,我们有有多个分支,其具有相同前缀就这样开始混帐回购协议:Git的 - 重命名多个分支
pfx.branchName1
pfx.branchName2
pfx.branchName3
...
所以现在的问题是如何快速删除所有前缀(“PFX。 “),从所有的树枝,得到这样的:
branchName1
branchName2
branchName3
...
这里,我们有有多个分支,其具有相同前缀就这样开始混帐回购协议: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
而这种去除之前检查:“^ PFX \”
git branch | grep "pfx." | awk '{original=$1; sub("pfx.",""); print original, "->", $1}'
您可以从git branch
, 的输出滤波器的分支名,然后使用一个循环猛砸与置换进行重命名:
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
由于省略了''grep的,第二种方法是假设所有分支开始'pfx',不是吗? –
@JoaoDelgado感谢您发现,我忘记为's ///'命令添加'p'标志,现在已经修复。 (没有那个标志,实际上没有东西会从'sed'打印出来,所以没有重命名。) – janos
我不知道'git branch -m'。酷招。 –
我给你的命令也是“通用的”,并且更安全:在分支名称的开头匹配前缀,即使在分支名称中使用特殊字符也是安全的,运行更少的进程并且更简单。 – janos
顺便说一句,如果你想在删除之前检查,更简单的方法是在'git'命令之前插入'echo',例如'xargs -n 2 echo git branch -m' – janos