列出所有分支并查询本地仓库与远程仓库是否同步
问题场景
给定分支结构:
F---E---D----B---A / C [branch name]
执行git branch --all的输出示例:
C *master /remotes/origin/C /remotes/origin/master
需求:无需逐个切换本地分支执行git status,通过单个命令自动检查所有本地分支与对应远程分支是否完全同步,识别出存在未推送本地提交的分支。
解决方案
快速查看分支同步状态
直接执行以下命令,能快速获取所有本地分支与关联远程分支的差异状态:
git branch -vv
输出示例中,类似C abc123 [origin/C ahead 1] 提交说明的行,ahead 1就表示本地C分支有1个未推送到远程origin/C的提交;behind 2则表示本地分支比远程分支少2个未拉取的提交;没有ahead/behind标记则说明分支完全同步。
自动检查并输出详细状态
如果需要更明确的结构化输出,可以执行以下脚本命令,它会自动遍历所有本地分支,统计并输出同步状态:
git for-each-ref --format='%(refname:short) %(upstream:short) %(push:track)' refs/heads/ | while read local remote track; do if [ -z "$remote" ]; then echo "本地分支 $local 未关联远程分支" else git rev-list --left-right --count "$remote...$local" | read local_count remote_count if [ $local_count -eq 0 ] && [ $remote_count -eq 0 ]; then echo "分支 $local 与远程 $remote 完全同步" else [ $local_count -gt 0 ] && echo "分支 $local 有 $local_count 个未推送到远程 $remote 的提交" [ $remote_count -gt 0 ] && echo "远程 $remote 有 $remote_count 个本地 $local 未拉取的提交" fi fi done
这个命令会:
- 遍历所有本地分支
- 检查分支是否关联了远程分支
- 统计本地与远程分支的提交差异数量
- 输出清晰的同步状态、未推送/未拉取的提交数
内容的提问来源于stack exchange,提问作者Tryer
相关产品推荐
相关产品推荐

