在Gerrit中删除了分支但仍然存在于Git存储库中

4

当我在做这个项目的时候(不得不)开始使用Gerrit,所以我使用git push orgin -all将“所有东西”推送到了Gerrit。不久之前,我注意到我还推送了一些额外的分支,在开始使用Gerrit之前已经合并到了主分支,并且已经在本地删除了:

$ git branch --all
* master
  remotes/oberon/master
  remotes/origin/96-fix-key-editors-references
  remotes/origin/master

我试图按照通常方式git push origin :remotes/origin/96-fix-key-editors-references)删除远程分支,但是Gerrit拒绝了我的请求,声称我没有Push特权和Force Push选项,这是完成此任务所必需的。
因此,我进入Gerrit的Web UI中的Project > Branches,标记了该分支,并通过点击Delete按钮成功删除了它(有趣的是:我可以在UI中做一些被SSH禁止的事情?)。
我以为这个问题已经解决了,直到我再次执行git branch --all,发现Git仍然报告分支remotes/origin/96-fix-key-editors-references仍然存在(结果与上面完全相同)。
我又一次使用git push origin :remotes/origin/96-fix-key-editors-references,只是出于好奇,想知道现在会发生什么,结果我得到了错误消息,说error: unable to delete '96-fix-key-editors-references': remote ref does not exist
所以,两个问题,实际上是一个:
  1. Gerrit如何从Web UI中删除分支,而不将其从Git的repo中删除?

  2. 如何同时将远程分支列在列表中,又无法删除(因为不存在)?

我对Git和Gerrit都很新手,可能会错过一些显而易见的东西,对此我深感抱歉!
2个回答

13

你在git branch --all命令的输出中看到的分支名称是一个远程跟踪分支。它是本地仓库中的一个特殊只读分支,每次获取时都与远程分支同步。即使分支从远程删除,git默认也不会删除它们,以便您有机会恢复,如果您并不是真的想要删除它们。

此命令将清除任何已经不存在于远程的陈旧的远程跟踪分支:

git fetch origin --prune

6
如果Gerrit声称您需要使用“强制推送”选项的“推送”权限,则可以轻松地从Gerrit中进行授权。只需转到“项目”>“访问权限”,然后进行“编辑”。请参见屏幕截图以获取详细信息。 Gerrit home page

谢谢你的回答。不幸的是,这个解决方案只适用于那些有更改项目权限的人。我没有这个权限。 - trejder
是的,你说得对。我希望这能帮助那些有权限但不知道如何在Gerrit中启用它的人 :) - Sharif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接