当我git fetch origin
并且origin有一个已删除的分支时,它似乎不会在我的存储库中更新它。当我git branch -r
时,它仍会显示origin/DELETED_BRANCH
。
我该如何解决这个问题?
答案 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 9e70233见Jeff King (peff
)(2016年6月13日)
(由Junio C Hamano -- gitster
--于commit 1c22105合并,2016年7月6日)
fetch
:在提取之前发生修剪的文件10a6cc8(
fetch --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