[英]git - remote branch “apparently” not deleted
开发人员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才能看到正确的远程状态。 即使不再存在myBranch,开发人员B仍然可以看到它在远程上。 如果开发人员B尝试检出myBranch并提取,则会出现“找不到myBranch引用”错误。
#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控制台上查看仓库,则分支“ myBranch”不存在。
这是怎么回事,为什么,我们怎么解决呢?
git分支-a
-a
代表所有分支(本地+远程),这就是为什么用户看到所有分支的原因。
即使不再存在myBranch,开发人员B仍然可以看到它在远程
您应该执行: git fetch --all --prune
修剪将删除分支的所有本地副本,这些副本将从服务器中删除。
您可以将剪枝值设置为默认值,这样它将在每次获取时删除已删除的分支和标记。
git config fetch.prune true
提取后,删除远程上不再存在的所有远程跟踪引用。
如果仅由于默认标签自动跟随或由于
-tag
选项而获取标签,则不对它们进行修剪。但是,如果由于显式的refspec(在命令行或在远程配置中,例如,如果使用--mirror选项克隆了远程服务器)而获取了标记,则也将对其进行修剪 。
开发人员B需要在git fetch上使用-p参数。 git fetch -p
此参数将删除远程上不存在的所有引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.