如何从Git中删除无效的远程分支引用?

时间:2009-07-02 02:39:41

标签: git branch remote-branch

在我目前的回购中,我有以下输出:

$ git branch -a
* master
  remotes/origin/master
  remotes/public/master

我想从分支列表中删除remotes/public/master

$ git branch -d remotes/public/master
error: branch 'remotes/public/master' not found.

此外,git remote的输出很奇怪,因为它没有列出public

$ git remote show 
origin

如何从分支列表中删除'remotes / public / master'?

更新,尝试了git push命令:

$ git push public :master
fatal: 'public' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

11 个答案:

答案 0 :(得分:704)

您可能需要清理

git gc --prune=now

或者您可能需要修剪

git remote prune public
  

<强>剪枝

     

删除&lt; name&gt;下的所有陈旧跟踪分支。这些陈旧的分支已从&lt; name&gt;引用的远程存储库中删除,但仍在“remotes /&lt; name&gt;”中本地可用。

     

使用--dry-run选项,报告将修剪哪些分支,但不实际修剪它们。

但是,看来这些应该早点用

清理
git remote rm public 
  

<强> RM

     

删除名为&lt; name&gt;的远程。远程的所有远程跟踪分支和配置设置              被删除。

因此,您可能手动编辑了配置文件,但这没有发生,或者您有特权问题。

也许再次运行,看看会发生什么。

建议背景

如果您查看revision logs,您会注意到我提出了更多“正确”的技术,这些技术无论出于何种原因都不想在其存储库中运行。

我怀疑OP已经做了一些让他们的树处于不一致状态的东西,导致它表现得有些奇怪,并且需要git gc来修复左后方的残骸。

通常 git branch -rd origin/badbranch足以用于核心本地跟踪分支,或git push origin :badbranch用于核对远程分支,通常你将永远需要致电git gc

答案 1 :(得分:658)

您需要做的就是

git fetch -p

它将删除所有远程删除的本地分支。

如果你使用的是git 1.8.5+,你可以自动设置

git config fetch.prune true

git config --global fetch.prune true

答案 2 :(得分:314)

git push public :master

这将删除Kent Fredric指出的名为master的远程分支。

列出远程跟踪分支:

git branch -r

删除远程跟踪分支:

git branch -rd public/master

答案 3 :(得分:156)

您需要做的就是

$ git branch -rd origin/whatever 

就这么简单。没有理由在这里打电话给gc。

答案 4 :(得分:70)

git gc --prune=now不是你想要的。

git remote prune public

git remote prune origin#如果是远程源

是你想要的

答案 5 :(得分:28)

当裁判被打包时,接受的答案对我不起作用。但是这样做:

$ git remote add public http://anything.com/bogus.git
$ git remote rm public

答案 6 :(得分:7)

就我而言,我试图删除.git/packed-refs中保存的条目。您可以编辑此纯文本文件,并删除git br -D不知道如何触摸的条目(至少在1.7.9.5版本中)。

我在这里找到了这个解决方案:https://stackoverflow.com/a/11050880/1695680

答案 7 :(得分:4)

git push origin --delete <branch name>

参考:http://www.gitguys.com/topics/adding-and-removing-remote-branches/

答案 8 :(得分:2)

我有类似的问题。没有一个答案有帮助。在我的情况下,我有两个永久显示的远程存储库。

我的最后一个想法是手动删除对它的所有引用。

可以说存储库名为“Repo”。我做了:

find .git -name Repo

并删除了相应的文件和目录

grep Repo -r .git

这发现了一些文本文件,我删除了相应的行。 现在,一切似乎都很好。

通常你应该把这份工作留给git。

答案 9 :(得分:2)

我不知道git branch -rd,所以我自己解决这类问题的方法是将我的仓库作为远程仓库处理并进行远程删除。 git push . :refs/remotes/public/master。如果其他方法不起作用,并且你想要摆脱一些奇怪的参考,这种原始的方式是肯定的。它为您提供了删除(或创建!)任何类型参考的精确精确度。

答案 10 :(得分:2)

只是略微相关,但在我们遇到的情况下仍然可能有所帮助 - 我们为远程存储库使用网络文件共享。上周事情正在发生,本周我们得到了错误&#34;远程来源没有为分支参考/头/主人做广告Ref。此参考可能不存在于遥控器中,或者可能被权限设置隐藏&#34;

但我们相信没有对腐败的事情做过任何事情。 NFS执行快照,因此我查看了每个&#34;以前的版本&#34;并且在三天前看到,存储库的MB大小从282MB变为33MB,现在大约有1,403个新文件和300个文件夹。我询问了我的同事,当天有人试图推动 - 然后取消了它。

我使用了NFS&#34; Restore&#34;功能将它恢复到该日期之前,现在每个人都能正常工作。我之前尝试过修剪,似乎没有帮助。也许更严厉的清理会有效。

希望有一天这可能会帮助别人!