当我这样做git fetch origin
并且 origin 有一个已删除的分支时,它似乎没有在我的存储库中更新它。当我这样做时git branch -r
,它仍然显示origin/DELETED_BRANCH
。
我怎样才能解决这个问题?
您需要执行以下操作
git fetch -p
-p
or参数将--prune
更新远程分支的本地数据库。
来自http://www.gitguys.com/topics/adding-and-removing-remote-branches/
有人从远程仓库删除分支后,当用户执行 git pull 或 git fetch 时,git 不会自动删除本地仓库分支。但是,如果用户希望从本地存储库中删除所有已在远程存储库中删除的跟踪分支,则可以键入:
git远程修剪起源
请注意,来自的 -p 参数git fetch -p
实际上意味着“修剪”。
无论您选择哪种方式,不存在的远程分支都将从您的本地存储库中删除。
您需要执行以下操作
git fetch -p
为了同步您的分支列表。git手册说
-p
,--prune
获取后,删除遥控器上不再存在的任何远程跟踪引用。如果仅由于默认标签自动跟随或由于--tags
选项而获取标签,则不会对其进行修剪。但是,如果由于显式 refspec(在命令行或远程配置中,例如,如果远程使用该--mirror
选项克隆)而获取标签,那么它们也会受到修剪。
我个人喜欢使用git fetch origin -p --progress
,因为它显示了一个进度指示器。
这对我有用。
git remote update --prune
关于git fetch -p
,它的行为在 Git 1.9 中发生了变化,只有 Git 2.9.x/2.10 反映了这一点。
请参阅Jeff King ( )的提交 9e70233(2016 年 6 月 13 日) 。(由Junio C Hamano 合并 -- --在提交 1c22105中,2016 年 7 月 6 日)peff
gitster
fetch
:在获取之前进行修剪的文档这在10a6cc8中进行了更改(
fetch --prune
:在获取之前运行 prune,2014-01-02),但似乎在那次讨论中没有人意识到我们正在明确宣传“之后”。
因此,文档现在指出:
在获取之前,删除远程上不再存在的任何远程跟踪引用
那是因为:
当我们
frotz/nitfol
从之前的 fetch 中有一个名为“”的远程跟踪分支,而上游现在有一个名为“frotz
”的分支,那么 fetch 将无法从上游删除frotz/nitfol
带有“git fetch --prune
”的“”。git 会通知用户使用 "git remote prune
" 来解决问题。
fetch --prune
通过在获取操作之前移动修剪操作来改变“ ”的工作方式。这样,它不会警告用户发生冲突,而是自动修复它。
如果git fetch -p origin
由于某种原因无法正常工作(例如因为原始存储库不再存在或您无法访问它),另一种解决方案是通过从存储库的根目录删除本地存储在该分支上的信息:
rm .git/refs/remotes/origin/DELETED_BRANCH
或者如果它通过删除相应的行来存储在文件.git/packed-refs
中,就像
7a9930974b02a3b31cb2ebd17df6667514962685 refs/remotes/origin/DELETED_BRANCH
对于git
和Apple git
更新的版本2.x
,这对我有用:
git remote prune origin