2

我已经删除并推送了一个分支,但它仍然显示branch -r给其他用户:

serverAlpha $ git push origin --delete origin/issue186
serverAlpha $ git push

serverBeta $ git pull
serverBeta $ git branch -r
  origin/HEAD -> origin/master
  origin/issue186
  origin/master

但是我知道git remote prune origin每个其他用户都必须运行它。我如何删除分支以便其他用户看到它已被删除?我不能指望也不能与所有其他人交流修剪,我不希望其他人基于该分支进行工作。

4

3 回答 3

3

TL;博士

你不能。一些操作在 Git 中只是本地的。

git-branch 与 git-ls-remote

git branch命令在本地参考上运行。该-r标志只是将输出限制为远程跟踪分支,但它不直接与远程通信。另一方面,git ls-remote实际上将显示来自远程的引用,而不是本地存储库。

删除别人的 Refs

你不能用 Git 做到这一点。分布式 VCS 的整体理念是状态可以以非集中的方式存在。在您的情况下,这意味着某人桌面上的 refs 可能与已定义远程上的某个裸存储库中的 refs 不匹配。

您是否希望其他人能够删除您桌面上的工作分支?可能不是。由于 Git 不允许这样做,因此您无需为此失眠。

您可以做的最好的事情是从服务器中删除分支。如您所说,如果您“无法与已经克隆该工作的其他人交流”,那么您无能为力,除非/当该工作被提交时,恢复或重新设置基于该分支的任何工作一些主线分支。

于 2013-08-22T16:04:59.987 回答
2

您不能删除其他人的分支。他们是他们的,甚至是远程跟踪的。

他们的远程跟踪分支将在下次从您删除分支的远程获取时被删除,前提是他们使用 -p (--prune) 标志(我通常这样做)。

于 2013-08-22T16:09:59.463 回答
1

如果您可以控制来源并且其他人已经从中撤出,那么您就不走运了。

但是,对于您的用例,我只需对 origin/master 分支进行新的提交,删除所有现有文件并添加一个自述文件,将用户指向应该使用的正确策略/分支。

这样一来,以前使用该分支的协作者就不会出现 fetch 问题,并且很清楚之前可能使用过 origin/master 的协作者应该如何继续。

于 2013-08-22T16:12:26.230 回答