如何删除仍然存在于远程但不再在我的fetch refspec中的所有远程跟踪分支

时间:2013-03-27 00:55:56

标签: git

我最近重组了remote.origin.fetch的refspec,现在只从远程获取一小部分分支。但是,git branch -a向我展示了我之前获取的许多远程分支,尽管它们现在不再被提取。使用git prune无济于事,因为远程跟踪分支确实存在于远程。

2 个答案:

答案 0 :(得分:7)

robrich 的答案有一个很好的提示:您可以删除每个远程跟踪分支(甚至远程),然后使用git fetch仅抓取您现在想要的那些从头开始。

如果您尝试同时删除遥控器,则可能需要备份.git / config文件,以便稍后再添加遥控器时,可以从备份中选择远程设置。 / p>

但是,删除远程并不会为我删除远程跟踪分支。也许我当地的回购很糟糕。对于任何有同样问题的人,我最终做的是:

# This deletes all remote tracking branches for all remotes. So be careful if you have multiple remotes.
git branch -r | xargs -L 1 git branch -rD

另外,我有很多来自遥控器的标签,这会降低速度。我也这样做了:

# Be careful! This deletes EVERY tag!
git tag | xargs -L 1 git tag -d

您可能希望将git fetch配置为下次不再提取所有这些标记,这超出了此问题的范围。

答案 1 :(得分:1)

您可以删除遥控器并重新添加,然后重新配置remote.origin.fetch。用槌击中蚂蚁山,但它会完成工作。你仍然需要删除本地分支(如果有的话),但这仅仅是git branch -D theOffendingBranchName

修改:如果您有冒险精神,可以通过.git/refs/删除您不喜欢的文件。首先备份你的.git文件夹 - 如果修剪错误的话。