Найти неслитые ветки Git?

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


person fluca1978    schedule 05.09.2012    source источник
comment
Сначала я смеялся над сроком слияния осьминогов. Но если вы, как и я, не знали: это официальное название стратегии слияния :-) См. git-scm.com/docs/git-merge или atlassian.com/de/git/tutorials/using-branches/merge-strategy   -  person observer    schedule 02.04.2020


Ответы (4)


Попробуй это:

git branch --merged master

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

git branch --no-merged master

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

git branch --merged

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

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

git branch -r --no-merged origin/master
person Amber    schedule 05.09.2012
comment
Если вы объедините foo с master, он появится в списке git branch --merged master. Но что произойдет, если вы еще раз зафиксируете foo? Его больше нет в этом списке, или он, хотя и имеет новые коммиты, был однажды объединен в master? - person Craig Otis; 09.07.2013
comment
@CraigOtis Он больше не будет отображаться в списке. --merged перечисляет только ветки, которые полностью объединены в данную ветку. - person Amber; 09.07.2013
comment
а gitk --remotes --not origin/master покажет вам коммиты в каждой ветке, которые не были объединены в master. - person yoyo; 21.06.2016
comment
Представьте себе это... ответ git, который легко понять и использовать! - person jleach; 03.11.2017
comment
Есть ли способ получить список, не проверяя ветку? Например, указать на сервер, а затем получить список? - person xbmono; 21.10.2019
comment
Как я обнаружил, git branch --no-merged master показывает только мои локальные ветки. Он не показывает ни одной ветки, которая не была проверена на моем компьютере и создана кем-то другим. - person Anton Danilchenko; 26.02.2020

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

git branch -r --merged master

git branch -r --no-merged

                         
person NemoXP    schedule 22.04.2014
comment
или -a для одновременного просмотра удаленного и локального - person Simon Forsberg; 11.10.2014
comment
Должен ли последний быть git branch -r --no-merged master ? - person MortimerCat; 03.10.2018

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

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

 git branch --merged

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

 git branch --no-merged

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

 git branch --no-merged integration

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

person Adam Dymitruk    schedule 05.09.2012

Приведенный ниже скрипт найдет все 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

Обновленная версия скрипта

person moldcraft    schedule 13.07.2017