开发人员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'不存在。
这里发生了什么,为什么,我们如何解决?
答案 0 :(得分:2)
git branch -a
-a
代表所有分支(本地+远程),这就是用户看到所有分支的原因。
开发人员B仍然看到myBranch在远程,即使它不再存在
您应该执行:git fetch --all --prune
修剪将删除分支的所有本地副本,从服务器中删除的标记。
您可以将修剪值设置为默认值,以便在每次提取时删除已删除的分支和标记
git config fetch.prune true
获取后,删除遥控器上不再存在的所有远程跟踪引用。
如果仅因默认标记自动跟踪或由于 -
-tag
选项而提取标记,则不对其进行修剪。但是,如果由于显式refspec而获取标记(在命令行或远程配置中,例如,如果使用--mirror选项克隆了远程),那么它们也受制于修剪强>
答案 1 :(得分:1)
开发人员B需要在git fetch上使用-p参数。
git fetch -p
此参数将删除远程不存在的所有引用。