我正在编写一个脚本来查找和删除GitHub存储库列表中的合并分支。但git branch -r --merged origin/master
命令不会返回合并的分支。
这是我的剧本:
#!/usr/bin/env bash
TARGET="/tmp/myorg"
rm -fR ${TARGET}
mkdir -p ${TARGET}
declare -A repos
repos["experiment"]="git@github.com:myorganisation/experiments.git"
for LAYER in "${!repos[@]}"
do
git clone ${repos[$LAYER]} "$TARGET/$LAYER" > /dev/null
cd "$TARGET/$LAYER"
MERGED_BRANCHES=$(git branch -r --merged origin/master)
for BRANCH in ${MERGED_BRANCHES[@]}
do
echo "$(date): Deleting ${BRANCH} from ${LAYER}"
git push --delete origin ${BRANCH}
done
done
为了测试这个脚本,我在GitHub上创建了一个测试存储库并添加了2个分支。我合并了其中一个并在open pull请求中留下了另一个。我期待在命令输出中看到合并的分支,但我只是得到:
$ git branch -r --merged origin/master
origin/HEAD -> origin/master
origin/master
系统: Ubuntu 16.04.2 LTS git版本2.7.4
答案 0 :(得分:1)
回答我自己的问题。
Git IRC社区对此案非常有帮助。以下是对话的一部分:
[15:55] Ayan:是的,显然他们正在使用“合并”这个词来表示 与git在使用时的含义略有不同的东西 字
[15:56] Ayan:如果你去github上你的回购设置, 你会找到一个部分来配置“合并”按钮的操作 被允许使用。在你的情况下,它确实“挤压合并”(其中 导致与正常合并相同的文件内容但不能 后来在git中被识别为合并)
[15:58]壁球和篮板合并通常不会被检测到 --merged
[15:59]是的, - 默里H是“给我看分支标签 提交是H“
的拓扑祖先[15:59]反叛打破了这种关系,压扁 打破这种关系
显然,GitHub是责备,如果你使用壁球或者rebase合并,就不可能使用这个脚本。