這裏,我們有有多個分支,其具有相同前綴就這樣開始混帳回購協議: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