Git - 重命名多个分支

12

这里有一个 Git 仓库,其中有多个分支以相同的前缀开头,就像这样:

pfx.branchName1  
pfx.branchName2  
pfx.branchName3  
...

那么问题是如何快速地从所有分支中删除所有前缀("pfx.")并获得以下结果:

branchName1  
branchName2  
branchName3  
... 
2个回答

12

发现了一个通用命令,可以搜索包含我们想要查找的字符串(例如"StringToFind")的分支,并通过将该部分替换为我们想要的字符串(例如"ReplaceWith")来重命名:

git branch | grep "StringToFind" | awk '{original=$1; sub("StringToFind","ReplaceWith"); print original, $1}' | xargs -n 2 git branch -m

注意: 在开始重命名之前,我们可以运行此命令以查看哪些分支将被重命名(仅为方便起见):

Note:在开始重命名之前,我们可以运行此命令以查看哪些分支将被重命名(仅为方便起见):

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}'

我给你的命令也是“通用”的,更安全:匹配分支名称开头的前缀,在分支名称中即使有特殊字符也很安全,运行的进程更少,更简单。 - janos
顺便说一句,如果你想在删除之前检查,一个更简单的方法是在 git 命令之前插入一个 echo,例如 xargs -n 2 echo git branch -m - janos
这对于本地的git分支很好。是否有办法也适用于远程分支呢? - Mayur Tolani

4
你可以从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

通过省略 grep '^pfx\.',第二种方法假设所有分支都以 pfx 开头,是吗? - Joao Delgado
@JoaoDelgado 感谢您发现了这个问题,我忘记为s///命令添加p标志,现在已经修复了。 (如果没有该标志,实际上sed不会打印任何内容,因此也不会重命名任何内容。) - janos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接