我有一堆被删除的远程分支,现在我想在本地删除分支.我试过了:
git fetch -p
但它不起作用.
如果我做:
git branch -r
和
git branch
列表不一样,因为git branch
即使在我运行之后仍然列出已删除的远程分支git fetch -p
.我已经看到这是在这里的很多问题中做到这一点的公认答案,但它对我不起作用.
我不确定我是否正确地说明了这个问题,所以这是另一种解释.说我有:
GitHub :(远程)
分支A
分支B
分支C.Local:
Branch A ==>(remote)Branch A
Branch B ==>(remote)Branch B
Branch C ==>(remote)Branch C
现在有人在GitHub上删除了一个分支,给出:
GitHub :(远程)
分支A
分支C.
我希望我的本地仓库看起来像是:
Local:
Branch A ==>(remote)Branch A
Branch C ==>(remote)Branch C.
torek.. 14
要扩展hobbs的注释,git fetch -p
(或git remote prune
任何类似的命令)只从存储库中删除遥控器上不再存在的每个"远程分支".
如果您已经建立了本地分支,那么除非您手动删除该标签,否则该标签不会消失.
例如,假设在远程origin
,有一个名为的分支sparkly
:
$ git fetch ... * [new branch] sparkly -> origin/sparkly
你没有sparkly
这个名字的分支(除非你已经有一个!); 你只能有origin/sparkly
(其中住在一个独立的名字空间,refs/remotes/
而不是refs/heads/
).
如果您之前创建了自己的分支sparkly
,则可能不会跟踪此新分支origin/sparkly
.但是,如果你创建了一个名为sparkly
now的分支,它将跟踪origin/sparkly
.
但是,在这两种情况下,都不会自动删除它.你必须手动完成.
原因之一是:不能保证只是因为origin/sparkly
已经消失了,你就完成了它("它"是你创建的本地分支,它可能跟踪也可能不跟踪这个远程分支).如果git删除了您的标签以及origin/
版本,那么您正在进行的任何提交都可能变得非常难以找到.
因此,简短的回答是:您必须手动执行此操作(或半手动执行此操作,您可以根据需要自动执行此操作).使用:
git branch -d sparkly
只有在"安全"(在git看来:-))中删除它,或者:
git branch -D sparkly
即使git认为这是"不安全"也要删除它.