【问题标题】:Remove old remote branches from Git从 Git 中删除旧的远程分支
【发布时间】:2013-07-02 11:35:32
【问题描述】:

当我在 Git 中使用 bash 自动完成功能时,它会不断向我显示我不再拥有的旧遥控器的分支。当我执行git branch -la 时,它会显示那些旧的遥控器和分支,而git branch -l 不会。 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

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

【问题讨论】:

标签: git


【解决方案1】:

nothing 推送到分支以将其删除:

git push remote :remote_branch

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

还是我误解了你的问题?

【讨论】:

  • “它在文档中的某个地方,但并不是很明显。”这就是git
  • “远程”是指您的远程存储库名称。比如“起源”之类的。但我开始认为你的意思不仅仅是删除远程分支。
  • 诸如此类的其他内容:stackoverflow.com/questions/1072171/…
【解决方案2】:

我用

git push origin :remote_branch

从服务器中删除一个分支。

git remote prune origin

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

【讨论】:

  • 不,不是这样。它说fatal: 'kolichikov' does not appear to be a git repository
  • Alex,您必须在存储库文件夹中运行命令,而不是在您的主文件夹中...
【解决方案3】:

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

要删除您的远程存储库之一的陈旧远程跟踪分支(已在远程存储库中删除的分支),请运行

git remote prune <remote>

引用手册页或git remote:

修剪

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

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

但是,从您的问题来看,您似乎手动删除了 .git/refs/remotes/theoldremote,因此 Git 不再知道远程跟踪分支所属的远程存储库。这不是你应该做的。

删除远程仓库的正常方法是运行

git remote rm <remote>

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

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

git branch -rd <remote>/<branchname>

您需要选项-r 来删除远程分支。

【讨论】:

  • 不,不是这样。它说fatal: 'kolichikov' does not appear to be a git repository
  • 在 fetch/pull 时自动修剪远程分支,另见:stackoverflow.com/a/18718936/968201
  • 如果您发现这很慢,请升级到更新的 Git (2.0.1+ IIRC) 并修复此问题(速度提高 100 倍以上)。
  • 修剪用户注意:Git documentation 说“在大多数情况下,用户应该运行 git gc,它调用 git prune。”。但是请注意git gc--dry-run 不兼容。
  • git branch -rd &lt;remote&gt;/&lt;branchname&gt; 是我想要的。谢谢!
【解决方案4】:

好的,我知道了。问题是遥控器不再存在,但它们在 git 数据库中的某个地方存在。我重新添加了遥控器,然后做了

git remote prune theremote
git remote rm theremote
git gc --prune=now

之后它们从列表中消失。不知何故,在我猜测之前我没有正确删除它们。

【讨论】:

  • 我从一堆来源中尝试了所有方法,唯一有效的方法是重新添加远程问题,然后将其删除。谢谢!
【解决方案5】:

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

commit b07bdd3Jens Lindström (jensl)

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

删除远程时,删除远程配置前先删除远程跟踪分支。
这样,如果删除远程跟踪分支时操作失败或中止,可以重新运行命令完成操作


但如果必须的话,一个简单的git fetch 就足够了,只要你先设置:

git config --global fetch.prune true
cd /path/to/repo
git config remote.origin.prune true

【讨论】:

【解决方案6】:

当我运行时,当我在服务器端删除的远程分支仍然出现时,我感到很困惑:

$ git branch --all

以下命令为我解决了这个问题(在 git 版本 2.25.0 上):

$ git remote update --prune

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 2021-04-15
    • 2011-03-12
    • 2013-02-21
    • 2016-02-01
    • 2021-08-22
    • 1970-01-01
    相关资源
    最近更新 更多