为什么Git在没有抱怨的情况下检查这个被删除的分支?

时间:2017-09-25 10:09:40

标签: git git-branch git-push git-checkout git-fetch

我刚从远处的Git存储库中删除了一个远程分支:

$ git push origin :obsoleteBranch

To git@<path_to_our_git_repo>/our_git_repo.git
 - [deleted]         obsoleteBranch

现在我的obsoleteBranch的本地副本现在正在追踪一个已经过去的分支&#34;:

git branch -avv
* obsoleteBranch  dbef4b0 [origin/obsoleteBranch: gone] commit log...

到目前为止,非常好!

问题是我的同事仍然看到了远程分支,即使在git fetch --all之后:

$ git fetch --all
Fetching origin
......
$ git branch -avv
......
remotes/origin/obsoleteBranch dbef4b0 commit log...
......
当我的同事试图检查被删除的分支时,Git并没有抱怨!

$ git checkout --track origin/obsoleteBranch

实际上检查结果就是删除分支的位置!

但是(证明远程分支实际上已经消失了)我的同事无法删除它:

$ git push origin :obsoleteBranch
error: unable to delete 'obsoleteBranch': remote ref does not exist
error: failed to push some refs to 'git@<path...>/our_git_repo.git'

出了什么问题?

没有git fetch --all将我的同事的存储库与远程存储库完全同步?

他应该运行什么命令,以便让他的本地存储库考虑到git branch -avvgit checkout的分支删除?

1 个答案:

答案 0 :(得分:2)

git缓存有关远程分支的信息。您的同事之前必须已获取有关该过时分支的信息。这就是他看到它并能够检查提交的原因(提交也下载到他的本地仓库)。

git fetch --all --prune

应删除对远程分支的现在孤立引用。