Jqw*_*Jqw 100 git git-remote
我有一个git repo,有几十个遥控器已经合并成了主人.我可以使用以下方法一次删除这些遥控器:
git push --delete origin myBranch-1234
Run Code Online (Sandbox Code Playgroud)
然而,对于所有遥控器来说,这是一个缓慢而乏味的过程.所以我正在尝试这个命令:
git branch -r --merged | grep origin | grep -v master | xargs git push origin --delete
Run Code Online (Sandbox Code Playgroud)
git branch -r --merged列出所有合并的遥控器.
grep origin告诉命令包含原点.
grep -v master告诉命令排除master.
xargs git push origin --delete告诉命令删除遥控器列表.
总之,我希望这会收集所有合并的遥控器并删除它们.
当我运行上面的命令时,我会收到每个合并的遥控器的以下内容;
error: unable to delete 'origin/myBranch-1234': remote ref does not exist
error: unable to delete 'origin/myBranch-1235': remote ref does not exist
error: unable to delete 'origin/myBranch-1236': remote ref does not exist
error: unable to delete 'origin/myBranch-1237': remote ref does not exist
... etc
Run Code Online (Sandbox Code Playgroud)
然而,这些遥控器确实存在,我可以检查每个遥控器.许多网站和人们建议我运行git fetch --prune以清理丢失的引用.这没有任何作用,因为所有这些遥控器都存在.
我想我错过了一些小事.每次我研究这个,似乎我正确地做到了这一点,但我得到了上述错误.
Igo*_*gor 208
您可能需要先修剪远程分支的本地"缓存".试试跑步:
git fetch -p origin
在删除之前.
Myk*_*rov 93
那些分支是从远程(原点)删除的吗?如果是的话,你可以做到
git fetch --prune origin
Run Code Online (Sandbox Code Playgroud)
否则,即使您在本地删除它们,它们也可能返回.
更新:再次查看您的命令,看起来您正在错误地构建它.你可能想要
git push origin --delete myBranch-1234
Run Code Online (Sandbox Code Playgroud)
但相反,你正在做类似的事情
git push origin --delete origin/myBranch-1234
Run Code Online (Sandbox Code Playgroud)
kos*_*ost 12
使用sed删除"原点/"部分和改变lttile xargs一部分.
git branch -r --merged | grep origin | grep -v -e master | sed s/origin\\/// | xargs -I{} git push origin --delete {}
Run Code Online (Sandbox Code Playgroud)