git branch - 错误输出

时间:2017-06-26 14:50:02

标签: git github

我正在编写一个脚本来查找和删除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

1 个答案:

答案 0 :(得分:1)

回答我自己的问题。

Git IRC社区对此案非常有帮助。以下是对话的一部分:

  

[15:55] Ayan:是的,显然他们正在使用“合并”这个词来表示   与git在使用时的含义略有不同的东西   字

     

[15:56] Ayan:如果你去github上你的回购设置,   你会找到一个部分来配置“合并”按钮的操作   被允许使用。在你的情况下,它确实“挤压合并”(其中   导致与正常合并相同的文件内容但不能   后来在git中被识别为合并)

     

[15:58]壁球和篮板合并通常不会被检测到   --merged

     

[15:59]是的, - 默里H是“给我看分支标签   提交是H“

的拓扑祖先      

[15:59]反叛打破了这种关系,压扁   打破这种关系

显然,GitHub是责备,如果你使用壁球或者rebase合并,就不可能使用这个脚本。