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

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

我该如何解决这个问题?

172257 次浏览

您需要完成以下操作

git fetch -p

-p--prune参数将更新远程分支的本地数据库。

从# EYZ0

当有人从远程存储库中删除一个分支后,git将不会删除 操作时自动删除本地存储库分支 不拉不取。但是,如果用户想拥有全部 跟踪从本地存储库中删除的分支 在远程存储库中删除,可以键入:

Git远程删除源文件

需要注意的是,git fetch -p中的-p参数实际上表示“修剪”。
无论您选择哪种方式,都将从本地存储库中删除不存在的远程分支。

这对我很管用。

git remote update --prune

您需要完成以下操作

git fetch -p

为了同步你的分支列表。git手册表示

< p > # EYZ0 # EYZ1 < br > 获取后,删除远程上不再存在的任何远程跟踪引用。如果仅仅因为默认标记自动跟踪或由于--tags选项而获取标记,则不受修剪的影响。但是,如果由于显式的refspec(在命令行上或在远程配置中,例如如果远程是用--mirror选项克隆的)而获取标记,那么它们也会受到修剪

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

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

参见提交9 e70233(2016年6月13日)的杰夫·金(peff)
(由滨野朱尼奥——gitster——提交1 c22105合并,2016年7月6日)

fetch:文档修剪发生之前抓取

这在10 a6cc8中被改变了(fetch --prune:在获取之前运行修剪,2014-01-02),但似乎在那个讨论中没有人意识到我们在宣传“;明确。

所以现在文档声明:

<强> < / >强之前获取,删除远程上不再存在的任何远程跟踪引用

这是因为:

当我们有一个名为“frotz/nitfol"的远程跟踪分支;而上游现在有一个名为&;# eyz1 &;的分支,fetch将无法删除&;# eyz0 &;用"git fetch --prune"从上游。git会通知用户使用& git remote prune"解决问题。

改变方式& fetch --prune"通过在获取操作之前移动修剪操作来工作。这样,它就会自动修复冲突,而不是警告用户发生冲突。

如果由于某些原因git fetch -p origin不工作(比如因为原始repo不再存在或你无法到达它),另一个解决方案是删除存储在本地分支上的信息,从repo的根执行:

rm .git/refs/remotes/origin/DELETED_BRANCH

或者如果它存储在文件.git/packed-refs中,则删除相应的行,如

7a9930974b02a3b31cb2ebd17df6667514962685 refs/remotes/origin/DELETED_BRANCH

对于gitApple git比版本2.x更新,这对我来说是有效的:

git remote prune origin