如何获取GitHub上已合并分支的列表及分支创建者信息?
获取已合并Git分支及创建者的实用方案
嘿,我之前也碰到过团队分支堆积需要统计的情况,给你几个直接能用的Git命令组合,应该能解决你的问题:
一、统计本地已合并分支及创建者
如果你的本地仓库已经同步了所有分支,可以用以下命令:
1. 针对单个目标分支(比如develop)
先列出所有已合并到develop且排除四个主流分支的功能分支,再逐个获取创建者:
for branch in $(git branch --merged develop | grep -v "^\*" | grep -v "develop\|staging\|demo\|master"); do # 取分支最早提交的作者(即分支创建者) creator=$(git log --pretty=format:"%an" $branch | tail -1) echo "分支名称: $branch, 创建者: $creator" done
2. 批量处理四个主流分支
一次性统计所有合并到develop、staging、demo、master的分支:
# 定义目标分支数组 target_branches=("develop" "staging" "demo" "master") for target in "${target_branches[@]}"; do echo -e "\n=== 已合并到${target}的分支列表 ===" # 过滤目标分支和当前分支,只保留功能分支 for branch in $(git branch --merged $target | grep -v "^\*" | grep -v "${target_branches[*]}"); do creator=$(git log --pretty=format:"%an" $branch | tail -1) echo "分支: $branch, 创建者: $creator" done done
二、统计远程已合并分支及创建者
如果分支主要在远程仓库(比如origin),可以调整命令适配远程分支:
target_branches=("develop" "staging" "demo" "master") for target in "${target_branches[@]}"; do echo -e "\n=== 已合并到origin/${target}的远程分支 ===" # 列出远程已合并分支并去掉origin/前缀 for remote_branch in $(git branch -r --merged origin/$target | sed 's/origin\///' | grep -v "${target_branches[*]}"); do creator=$(git log --pretty=format:"%an" origin/$remote_branch | tail -1) echo "远程分支: $remote_branch, 创建者: $creator" done done
三、输出到文件方便统计
如果需要把结果保存成文件做后续分析,只需要在命令末尾加上输出重定向:
# 以本地分支统计为例 target_branches=("develop" "staging" "demo" "master") for target in "${target_branches[@]}"; do echo -e "\n=== 已合并到${target}的分支列表 ===" >> merged_branches_report.txt for branch in $(git branch --merged $target | grep -v "^\*" | grep -v "${target_branches[*]}"); do creator=$(git log --pretty=format:"%an" $branch | tail -1) echo "分支: $branch, 创建者: $creator" >> merged_branches_report.txt done done
小提示
- 如果分支名称包含特殊字符(比如空格),可以把循环改成用
while read来处理,避免出错。 git log --pretty=format:"%an"会显示作者名称,如果你需要邮箱可以改成%ae。
内容的提问来源于stack exchange,提问作者SHIVAM JINDAL




