最近在开发的时候偶然发现,同事在本地使用git branch -a
会看到我已经删除的远程分支,git fetch
之后依然能看到,然后同事就来询问我为什么不清理掉那些久远的分支,然而我确实是执行了git push origin --delete branchName
删除每个版本后不用的分支。当时感觉非常奇怪,然后又发现,我在本地也能看到同事已经删除的远程分支。当时我就蒙蔽了,非常蒙蔽。后来查找资料才知道,我们需要使用git remote prune origin
。
先调用git remote show origin
该命令能够获取远端分支信息,你可以看到和本地和远端不同步的地方:
$ git remote show origin
* remote origin
Fetch URL: git@gitlab.xxx.git
Push URL: git@gitlab.xxx.git
HEAD branch: master
Remote branches:
dev_chj tracked
dev_pr tracked
dev_pr_v13 tracked
dev_wcc tracked
dev_wcc_city tracked
dev_xgm tracked
develop tracked
hofix_jingxiaoshang tracked
hotfix_code_sort tracked
hotfix_groupclueimport tracked
master tracked
refs/remotes/origin/dev_cjc stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_agent stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_brand stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_channel_ad stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_channel_youhua stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_chonggouquanxian stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_dahuanxue stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_deletegame stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_getActivity_info stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_jiechufenghao stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_kefuwaihu stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_notice stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_refreshtoken stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_v10_0904 stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_v12 stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_v14 stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_v16 stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_v16_tmp stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_v9 stale (use 'git remote prune' to remove)
refs/remotes/origin/feature_youhua_shiro stale (use 'git remote prune' to remove)
refs/remotes/origin/hofix_cardno stale (use 'git remote prune' to remove)
refs/remotes/origin/hofix_channel_export stale (use 'git remote prune' to remove)
refs/remotes/origin/hofix_export stale (use 'git remote prune' to remove)
refs/remotes/origin/hofix_import_cardorder stale (use 'git remote prune' to remove)
refs/remotes/origin/hofix_master stale (use 'git remote prune' to remove)
refs/remotes/origin/hofix_master_sql stale (use 'git remote prune' to remove)
refs/remotes/origin/hofix_page stale (use 'git remote prune' to remove)
refs/remotes/origin/hofix_session_redis stale (use 'git remote prune' to remove)
refs/remotes/origin/hofix_sql stale (use 'git remote prune' to remove)
refs/remotes/origin/hofix_tishixiansuo stale (use 'git remote prune' to remove)
refs/remotes/origin/hotfix_authc stale (use 'git remote prune' to remove)
release tracked
test tracked
Local branches configured for 'git pull':
dev_chj merges with remote dev_chj
dev_pr merges with remote dev_pr
dev_wcc merges with remote dev_wcc
dev_wcc_city merges with remote dev_wcc_city
dev_xgm merges with remote dev_xgm
develop merges with remote develop
feature_dahuanxue merges with remote feature_dahuanxue
feature_v16 merges with remote feature_v16
master merges with remote master
release merges with remote release
test merges with remote test
Local refs configured for 'git push':
dev_chj pushes to dev_chj (local out of date)
dev_pr pushes to dev_pr (up to date)
dev_wcc pushes to dev_wcc (up to date)
dev_wcc_city pushes to dev_wcc_city (up to date)
dev_xgm pushes to dev_xgm (local out of date)
develop pushes to develop (local out of date)
master pushes to master (local out of date)
release pushes to release (up to date)
test pushes to test (local out of date)
* 远程 origin
获取地址:http://openapi2.0.git
推送地址:http://openapi2.0.git
HEAD分支:master
远程分支:
beta 已跟踪
develop 已跟踪
master 已跟踪
refs/remotes/origin/communal 过时(使用 'git remote prune' 来移除)
refs/remotes/origin/lt-v1 过时(使用 'git remote prune' 来移除)
release/1.0 已跟踪
为 'git pull' 配置的本地分支:
beta 与远程 beta 合并
develop 与远程 develop 合并
master 与远程 master 合并
为 'git push' 配置的本地引用:
beta 推送至 beta (最新)
develop 推送至 develop (本地已过时)
master 推送至 master (本地已过时)
过时的就是和本地不同步的分支,本地已过时的表示你需要移除这个分支了。
这个时候你需要调用
git remote prune origin
同步远程的分支到本地,这样远程已经被删除的分支,本地就不会再看见了。