从已删除的远程分支获取原点?

时间:2011-04-22 01:56:18

标签: git git-fetch

当我git fetch origin并且origin有一个已删除的分支时,它似乎不会在我的存储库中更新它。当我git branch -r时,它仍会显示origin/DELETED_BRANCH

我该如何解决这个问题?

6 个答案:

答案 0 :(得分:694)

您需要执行以下操作

git fetch -p

这将更新远程分支的本地数据库。

答案 1 :(得分:81)

来自http://www.gitguys.com/topics/adding-and-removing-remote-branches/

  

有人从远程存储库中删除分支后,git不会   当用户执行a时自动删除本地存储库分支   git pull或git fetch。但是,如果用户想拥有所有   跟踪已从其本地存储库中删除的分支   在远程存储库中删除,他们可以输入:

     

git remote prune origin

作为一个注释,来自git fetch -p的-p param实际上意味着“修剪”。
无论您选择哪种方式,都将从本地存储库中删除不存在的远程分支。

答案 2 :(得分:28)

您需要执行以下操作

git fetch -p

以便同步您的分支列表。 git manual

  

-p--prune
  获取后,删除远程不再存在的任何远程跟踪引用。如果仅由于默认标记自动跟踪或由于--tags选项而提取标记,则不会对标记进行修剪。但是,如果由于显式refspec(在命令行或远程配置中,例如,如果使用--mirror选项克隆了远程)来提取标记,则它们也会受到修剪。

我个人喜欢使用git fetch origin -p --progress因为它显示了进度指示器。

答案 3 :(得分:9)

这对我有用。

git remote update --prune

答案 4 :(得分:6)

关于git fetch -p,它的行为在Git 1.9中发生了变化,只有Git 2.9.x / 2.10反映了这一点。

commit 9e70233Jeff King (peff)(2016年6月13日) (由Junio C Hamano -- gitster --commit 1c22105合并,2016年7月6日)

  

fetch:在提取之前发生修剪的文件

     

10a6cc8fetch --prune:在获取之前运行修剪,2014-01-02)中已更改,但似乎没有人在讨论中意识到我们明确地宣传了“之后”。 / p>

所以文档现在声明:

  

提取之前,删除远程不再存在的所有远程跟踪引用

那是因为:

  

如果我们有一个名为“frotz/nitfol”的远程跟踪分支,并且上游现在有一个名为“frotz”的分支,则fetch将无法删除“{{1}来自上游的“frotz/nitfol”。 git会通知用户使用“git fetch --prune”来解决问题。

     

通过在提取操作之前移动修剪操作来更改“git remote prune”的工作方式。这样,它不会警告用户冲突,而是自动修复它。

答案 5 :(得分:0)

如果git fetch -p origin由于某种原因(例如,由于原始存储库不再存在或您无法访问)而无法使用,另一种解决方案是通过执行以下操作删除该分支上本地存储的信息:回购的根源:

rm .git/refs/remotes/origin/DELETED_BRANCH

或者如果它通过删除对应的行(如

)存储在文件.git/packed-refs
7a9930974b02a3b31cb2ebd17df6667514962685 refs/remotes/origin/DELETED_BRANCH