git - 远程分支“显然”未删除

时间:2016-01-10 13:39:11

标签: git github bitbucket

开发人员A创建远程分支

git checkout -b myBranch
git push -u origin myBranch

开发人员B检查出来

git fetch origin myBranch
git checkout myBranch

他们都做了一些工作,提交,拉动等等。完成后,合并回去开发

git checkout develop
git merge --no-ff myBranch
git push origin develop

并删除分支

# Developer A
git branch -d myBranch             # delete local branch
git push origin --delete myBranch  # delete remote branch

# Developer B
git branch -d myBranch
git fetch

此时,只有推动远程删除的开发人员A才能看到正确的远程状态。开发人员B仍然看到myBranch在远程,即使它不再存在。如果开发人员B试图检查myBranch并拉出,则会收到“找不到myBranch ref”错误。

#Developer A
git branch -a
  * develop
  remotes/origin/HEAD -> origin/develop
  remotes/origin/develop
  remotes/origin/production

#Developer B
git branch -a
  * develop
  remotes/origin/myBranch                 # <<<<< why is this line here??
  remotes/origin/HEAD -> origin/develop
  remotes/origin/develop
  remotes/origin/production

如果我们继续使用bitBucket Web控制台并查看repo,则分支'myBranch'不存在。

这里发生了什么,为什么,我们如何解决?

2 个答案:

答案 0 :(得分:2)

  

git branch -a

-a代表所有分支(本地+远程),这就是用户看到所有分支的原因。

  

开发人员B仍然看到myBranch在远程,即使它不再存在

您应该执行:git fetch --all --prune
修剪将删除分支的所有本地副本,从服务器中删除的标记。

您可以将修剪值设置为默认值,以便在每次提取时删除已删除的分支和标记

git config fetch.prune true

-p / --prune

  

获取后,删除遥控器上不再存在的所有远程跟踪引用。

     

如果仅因默认标记自动跟踪或由于 - -tag选项而提取标记,则不对其进行修剪。

     

但是,如果由于显式refspec而获取标记(在命令行或远程配置中,例如,如果使用--mirror选项克隆了远程),那么它们也受制于修剪

答案 1 :(得分:1)

开发人员B需要在git fetch上使用-p参数。 git fetch -p 此参数将删除远程不存在的所有引用。