步骤 1:拉取最新的远程分支信息
确保本地缓存的远程分支信息是最新的:
bash
复制
git fetch --all
步骤 2:遍历所有远程分支并检查目标文件夹
使用 git ls-tree
检查每个分支是否包含目标文件夹。以下脚本会列出所有包含 your_folder_path
的远程分支:
bash
复制
# 替换为你的目标文件夹路径(例如 src/utils) FOLDER_PATH="your_folder_path" git for-each-ref --format='%(refname:short)' refs/remotes | while read branch; do if git ls-tree -r --name-only "$branch" -- "$FOLDER_PATH" 2>/dev/null | grep -q .; then echo "$branch" fi done
参数说明
-
git for-each-ref
: 遍历所有引用(这里筛选远程分支)。 -
git ls-tree -r --name-only "$branch" -- "$FOLDER_PATH"
: 检查分支是否包含目标文件夹。-
2>/dev/null
: 忽略文件夹不存在的错误。 -
grep -q .
: 静默检查是否有输出(即文件夹存在)。
-
示例输出
假设目标文件夹为 src/utils
,输出结果类似:
复制
origin/feature/add-utils origin/bugfix/utils-error
扩展用法
1. 仅检查特定远程(如 origin
)
bash
复制
git for-each-ref --format='%(refname:short)' refs/remotes/origin
2. 排除 HEAD 分支
bash
复制
git for-each-ref --format='%(refname:short)' refs/remotes | grep -v 'HEAD$'
原理
通过遍历所有远程分支的最新提交,检查每个分支的代码树中是否存在目标文件夹。如果存在,则输出分支名称。