繁体   English   中英

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

[英]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

-p /-修剪

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

如果仅由于默认标签自动跟随或由于-tag选项而获取标签,则不对它们进行修剪。

但是,如果由于显式的refspec(在命令行或在远程配置中,例如,如果使用--mirror选项克隆了远程服务器)而获取了标记,则也将对其进行修剪

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM