当我运行 git fetch origin
命令时,如果 origin 仓库中的分支被删除了,我的本地仓库似乎没有更新。当我运行 git branch -r
命令时,它仍然显示 origin/DELETED_BRANCH
。
我应该如何解决这个问题?
您需要执行以下操作:
git fetch -p
-p
或--prune
参数将会更新远程分支的本地数据库。
origin
分支中删除一个不存在的远程分支:git fetch -p origin
然后我执行了以下命令:git branch -r
这个不存在的远程分支就不再显示出来了。 - oldfartdevelopergit remote prune origin
相同,并类似于 https://dev59.com/0G025IYBdhLWcg3wPzbL#6127884 和 https://dev59.com/g2Ml5IYBdhLWcg3w966L#17983126 中提到的 git pull --prune
。 - imz -- Ivan Zakharyaschev[deleted] (none) -> origin/ <分支名称>
,但该分支仍显示在本地仓库中,你有什么想法是为什么? - Buddhi741git branch
命令仍然显示了这些被删除的分支。请帮我翻译。 - sdfsdf来自http://www.gitguys.com/topics/adding-and-removing-remote-branches/
当有人从远程仓库中删除一个分支后,git不会自动在用户执行git pull或git fetch时删除本地仓库的分支。但是,如果用户想要将所有已在远程仓库中被删除的跟踪分支从本地仓库中删除,他们可以输入:
git remote prune origin
需要注意的是,git fetch -p
中的-p参数实际上意味着“prune”。
无论你选择哪种方式,不存在的远程分支都将从你的本地仓库中删除。
您需要按照以下步骤进行操作
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 (peff
) 在 提交记录 9e70233(2016年6月13日)中撰写。
(由 Junio C Hamano -- gitster
-- 在 提交记录 1c22105 (2016年7月6日)进行合并)
fetch
: 记录修剪在获取之前执行此行为在 10a6cc8 中被更改 (
fetch --prune
: 运行修剪操作先于获取操作, 2014-01-02),但似乎在讨论中没有人意识到我们明确地宣传了“之后”的行为。
因此,文档现在如下所述:
在获取之前,删除任何在远程不存在的远程跟踪引用。
原因是:
如果我们之前已经从远程仓库拉取了一个名为“
frotz/nitfol
”的跟踪分支,而远程仓库现在有了一个名为“frotz
”的分支,使用“git fetch --prune
”命令从远程更新代码时,“frotz/nitfol
”分支将无法被删除。Git会提示用户使用“git remote prune
”来解决该问题。通过在拉取操作之前执行修剪操作,改变“
fetch --prune
”命令的工作方式。这样,它可以自动修复冲突,而不是向用户发出警告。
对于git
和版本大于2.x
的Apple git
,以下方法适用:
git remote prune origin
git fetch -p origin
不能正常工作,另一种解决方法是从存储库的根目录执行以下操作,以删除在该分支上本地存储的信息:rm .git/refs/remotes/origin/DELETED_BRANCH
如果存储在文件.git/packed-refs
中,则可以通过删除相应的行来删除引用,该行类似于:
7a9930974b02a3b31cb2ebd17df6667514962685 refs/remotes/origin/DELETED_BRANCH