协慌网

登录 贡献 社区

如何从 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 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

答案

您可能需要清理

git gc --prune=now

否则您可能需要修剪

git remote prune public

修剪

删除 <名称> 下的所有过时的跟踪分支。这些陈旧的分支已从 引用的远程存储库中删除,但仍可在本地使用 “remotes / ”。

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

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

git remote rm public

R M

删除名为 的远程服务器。远程的所有远程跟踪分支和配置设置都将被删除。

因此,可能是您手动编辑了配置文件,但这种情况没有发生,或者您遇到权限问题。

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

咨询上下文

如果您查看修订日志 ,您会注意到我建议了更多的 “正确” 技术,无论出于何种原因,它们都不希望在其存储库中使用。

我怀疑 OP 所做的某些事情使他们的树处于不一致状态,从而导致其行为有些奇怪,并且需要git gc来修复左后角的碎片。

通常 git branch -rd origin/badbranch是足够的摧毁当地的跟踪分支,或git push origin :badbranch为的摧毁远程分支, 通常你将永远不会需要调用git gc

您需要做的就是

git fetch -p

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

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

git config fetch.prune true

要么

git config --global fetch.prune true
git push public :master

正如 Kent Fredric 指出的那样,这将删除名为master的远程分支。

列出远程跟踪分支机构:

git branch -r

删除远程跟踪分支:

git branch -rd public/master