Найти неразделенные ветки Git?

У меня есть репозиторий Git со многими ветками, некоторые из которых уже объединены, а некоторые нет. Поскольку число ветвей довольно велико, как я могу определить, какие ветки еще не были объединены? Я хотел бы избежать необходимости выполнять слияние и повторное объединение осьминога, которые уже были объединены.

Ответ 1

Попробуйте следующее:

git branch --merged master

Он делает то, что он говорит на олове (списки ветвей, которые были объединены в master). Вы также можете потянуть инверсию с помощью:

git branch --no-merged master

Если вы не указали master, например...

git branch --merged

то он покажет вам ветки, которые были объединены в текущий HEAD (поэтому, если вы находитесь на master, это эквивалентно первой команде; если вы находитесь на foo, это эквивалентно git branch --merged foo).

Вы также можете сравнить ветки восходящего потока, указав флаг -r и ref для проверки, который может быть локальным или удаленным:

git branch -r --no-merged origin/master

Ответ 2

Вы также можете использовать параметр -r для отображения удаленных ветвей, которые не были объединены в master:

git branch -r --merged master

git branch -r --no-merged

Ответ 3

Если ветка уже слита, слияние ее снова ничего не сделает. Поэтому вам не нужно беспокоиться о "повторной слиянии" ветвей, которые уже объединены.

Чтобы ответить на ваш вопрос, вы можете просто выпустить

 git branch --merged

чтобы увидеть объединенные ветки или

 git branch --no-merged

чтобы увидеть несвязанные ветки. Текущая ветка подразумевается, но вы можете указать другие ветки, если хотите.

 git branch --no-merged integration

покажет вам ветки, которые еще не объединены в ветвь integration.

Ответ 4

Ниже script найдет все ветки origin/*, которые опережают текущую ветвь

#!/bin/bash

CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)

echo -e "Current branch: \e[94m$CURRENT_BRANCH\e[0m"
echo ''

git branch -a | grep remotes/origin/ | while read LINE
do
    CMD="git diff --shortstat remotes/origin/${CURRENT_BRANCH}...${LINE}"

    if $CMD | grep ' file' > /dev/null; then
        echo -e "\e[93m$LINE\e[0m" | sed 's/remotes\/origin\///'
        $CMD
        echo ''
    fi
done

Обновленная версия script

Ответ 5

Below script will fetch you unmerged branches and write results in .xls file 
#!/usr/bin/env bash
echo "getting list of unmerged_branches from the remote"
file_name=unmerged_branches.xls'enter code here'
current_time=$(date "+%Y.%m.%d-%H.%M.%S")
for branch in 'git branch -r --no-merged | grep -v HEAD';
do echo -e 'git show --format="%cd  \\t%cr  \\t%ae" $branch | head -n 1' \\t$branch; 
done | sort -r >> $current_time.$file_name
echo "result is writtein in ";
echo $current_time.$file_name;