从Git中删除旧的远程分支

Ale*_*lex 69 git

当我在Git中使用bash自动完成时,它会不断向我展示我不再拥有的旧遥控器的分支.当我这样做时,git branch -la它会显示那些旧的遥控器和分支,而git branch -l不会.A ls .git/refs/remotes/也显示了它们.但是,它们不存在于我的.git/config中,并且在我运行时它们都没有显示git remote show.

那么我如何摆脱它们,因为我的自动完成列表现在太长了.

我已经尝试过了:

git reflog expire --expire=now --all
git gc --prune=now
rm .git/refs/remotes/theoldremote
git remote prune theoldremote
Run Code Online (Sandbox Code Playgroud)

我也知道我可以重新克隆回购但这只是作弊;-)

sle*_*ske 129

如果在远程存储库中删除了分支,Git不会自动删除(本地)远程跟踪分支.此外,在V2.0.1之前远程跟踪分支在某些情况下,当您从git配置中删除远程时,不会删除远程跟踪分支(请参阅VonC的答案).

要删除其中一个远程存储库的过时远程跟踪分支(在远程存储库中删除的分支),请运行

git remote prune <remote>
Run Code Online (Sandbox Code Playgroud)

引用手册页或git remote:

修剪

删除<name>下的所有陈旧跟踪分支.这些陈旧的分支已从<name>引用的远程存储库中删除,但仍在"remotes/<name>"中本地可用.

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

但是,根据您的问题,您似乎手动删除了.git/refs/remotes/theoldremote,因此Git不再了解远程跟踪分支所属的远程存储库.这不是你应该怎么做的.

删除远程存储库的常规方法是运行

git remote rm <remote>
Run Code Online (Sandbox Code Playgroud)

这将从您.git/config的远程删除远程,并将删除远程跟踪分支.

如果你只删除下面的目录.git/refs/remotes/,分支将留在后面.然后您需要手动删除它们:

git branch -rd <remote>/<branchname>
Run Code Online (Sandbox Code Playgroud)

您需要-r删除远程分支的选项.

  • 不,不是这样。它说`fatal: 'kolichikov' 似乎不是一个 git 存储库`。 (2认同)
  • 有关 fetch/pull 上远程分支的自动修剪,另请参见:http://stackoverflow.com/a/18718936/968201 (2认同)

Mer*_*ert 16

我用

git push origin :remote_branch
Run Code Online (Sandbox Code Playgroud)

从服务器中删除分支.

git remote prune origin
Run Code Online (Sandbox Code Playgroud)

删除服务器上不存在的远程引用

  • "git remote prune origin",这对我有用 (3认同)

Von*_*onC 6

注意:虽然git remote prune是答案,但要知道,从git 2.0.1开始(2014年6月25日),git remote rm 首先要删除远程跟踪分支.
所以希望,一个人不应该在一个之后清理旧的分支git remote rm.

提交b07bdd3延林德斯特罗姆(jensl)

remote rm:删除远程配置作为最后一个

删除远程时,请删除远程跟踪分支,然后再删除远程配置.
这样,如果在删除远程跟踪分支时操作失败或中止,则可以重新运行该命令以完成操作.


但是如果你必须这样git fetch做,只要你先设定一个简单就足够了:

git config --global fetch.prune true
cd /path/to/repo
git config remote.origin.prune true
Run Code Online (Sandbox Code Playgroud)


ara*_*aer 5

向分支推送任何内容即可将其删除:

git push remote :remote_branch

它在文档中的某个地方,但并不是很明显。

或者我误解了你的问题?

  • “它在文档中的某个地方,但并不是很明显。” 这就是`git` (3认同)