2017-07-15 114 views
2

這裏,我們有有多個分支,其具有相同前綴就這樣開始混帳回購協議:Git的 - 重命名多個分支

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

所以現在的問題是如何快速刪除所有前綴(「PFX。 「),從所有的樹枝,得到這樣的:

branchName1 
branchName2 
branchName3 
... 

回答

1

找到一個通用的命令,搜索其中含有我們所期望的字符串的分支(例如"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}' 
+0

我給你的命令也是「通用的」,並且更安全:在分支名稱的開頭匹配前綴,即使在分支名稱中使用特殊字符也是安全的,運行更少的進程並且更簡單。 – janos

+0

順便說一句,如果你想在刪除之前檢查,更簡單的方法是在'git'命令之前插入'echo',例如'xargs -n 2 echo git branch -m' – janos

2

您可以從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 
+0

由於省略了''grep的,第二種方法是假設所有分支開始'pfx',不是嗎? –

+0

@JoaoDelgado感謝您發現,我忘記爲's ///'命令添加'p'標誌,現在已經修復。 (沒有那個標誌,實際上沒有東西會從'sed'打印出來,所以沒有重命名。) – janos

+0

我不知道'git branch -m'。酷招。 –