git - 你怎么从Git删除无效的远程分支引用?

  显示原文与译文双语对照的内容

在我当前的仓库中,我有以下输出:


$ 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远程'的输出很奇怪,因为它不列出'公用':


$ git remote show 
origin

在分支 list, 。如何删除'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

解决方案:接受的答案在底部得到了解决方案

 
git gc --prune=now

 
时间:

你可能需要清理

 
git gc --prune=now

 

或者你可能需要修剪


git remote prune public

 prune
 Deletes all stale tracking branches under <name>. These stale branches have already been removed from
 the remote repository referenced by <name>, but are still locally available in"remotes/<name>".

 With --dry-run option, report what branches will be pruned, but do no actually prune them.

然而,看起来这些应该已经提前清理过了


git remote rm public 

 rm
 Remove the remote named <name>. All remote tracking branches and configuration settings for the remote
 are removed.

因此,可能是你hand-edited的配置文件,但没有发生,或者你有特权问题。

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

建议上下文

在他们repository,如果你看一看在 修订日志中,你会注意我推荐了更多"正确"概念,它由于各种原因而没有希望之工作

我怀疑OP会用些了留下他的树在不一致的状态,致使它以行为都怪一些,所需和 git gc 是负责整理这个抛弃了繁琐的东西。

通常 git branch -rd origin/badbranch 对于nuking本地跟踪分支足够,或者 git push origin :badbranch 通常,为nuking一个远程分支和 你将从不需要调用 git gc

你需要做的就是

 
git fetch -p

 

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

如果你在 git 1.8.5 + 上,你可以自动设置


git config fetch.prune true

或者


git config --global fetch.prune true


git push public :master

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

要列出remote-tracking分支:

 
git branch -r

 

要删除remote-tracking分支:


git branch -rd public/master

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


git remote prune public

或者 git remote prune origin # 如果是远程源

就是你想要


git push origin --delete <branch name>

引用来自:http://www.gitguys.com/topics/adding-and-removing-remote-branches/

在我的例子中,我试图删除在 .git/packed-refs 中保存的条目。 你可以编辑这里纯文本文件并删除 git br -D 不知道如何触摸( 至少在 1.7.9.5 中)的条目。

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

我也有类似的问题。 所有的答案都没有帮助。 在我的例子中,我有两个被删除的远程仓库,它们永久显示。

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

假设仓库被称为"仓库"。 我做了:


find. git -name Repo

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


grep Repo -r. git

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

通常你应该把这个作业留给 git 。

我不知道 git branch -rd,所以我解决这个问题的方法是把我的仓库当作远程仓库对待,并进行远程删除。 git push. :refs/remotes/public/master 如果其他的方法不起作用,你有一些奇怪的参考,你想摆脱,这种原始的方式。 它提供了精确的精度来删除( 或者创建) 任何引用。

...