git: лучший способ определить неотключенные ветви в скрипте

В интерактивном режиме я могу использовать git branch -r --no-merged команда для определения удаленных веток, которые еще не были объединены. Тем не мение, git branch является командой фарфора и поэтому не подходит для использования в сценарии.

Есть ли какая-нибудь хорошая сантехническая команда, которую я могу использовать, чтобы определить те же ветви, возвращаемые --no-merged вариант?

1 ответ

Решение

Я обнаружил, что команда git merge-base поддерживает --is-ancestor аргумент, чтобы проверить, содержится ли фиксация в истории другого. Используя это, я могу найти unmerged удаленные ссылки, как это (в ksh):

function showUnmerged {
    typeset -a unmergedRefs=()

    git for-each-ref --format='%(objectname) %(refname)' refs/remotes | \
    while read -r hash ref; do
        git merge-base --is-ancestor "$hash" "$1" || unmergedRefs+=("$ref")
    done

    echo "${unmergedRefs[@]}"
}

showUnmerged HEAD

Это не кажется особенно эффективным, но это работает и, насколько я знаю, оба for-each-ref а также merge-base сантехнические команды

Другие вопросы по тегам