Знайти незатоплені гілки Git?


276

У мене є сховище Git з багатьма гілками, деякі з них уже об'єднані, а деякі ні. Оскільки кількість гілок досить велика, як я можу визначити, які гілки ще не об’єднані? Мені б хотілося уникати злиття та повторного злиття гілок, які вже були об'єднані.


1
Спочатку я сміявся над терміном «злиття восьминога». Але якщо ви не знали, як я: Це офіційна назва стратегії злиття :-) Дивіться git-scm.com/docs/git-merge або atlassian.com/de/git/tutorials/using-branches/ стратегія злиття
спостерігач

Відповіді:


462

Спробуйте це:

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

5
Якщо ви зливаєте fooв master, він з'явиться в git branch --merged masterсписку. Але що трапиться, якщо ви знову покладетеся на це foo? Він більше не відображається в цьому списку, чи він, як би не маючи нових комісій, в один момент був об'єднаний у master?
Крейг Отіс

11
@CraigOtis Він більше не відображатиметься у списку. --mergedперелічує лише гілки, які повністю об'єднані в дану гілку.
Бурштин

і gitk --remotes --not origin/masterпокаже вам зобов’язання на кожній гілці, які не були об'єднані до головного.
yoyo

5
Уявіть собі це ... git відповідь, яку легко зрозуміти та використовувати!
jleach

1
Чи є спосіб отримати список без перевірки відділення? Як вказувати на сервер, а потім отримати список?
xbmono

57

Параметр -r також можна використовувати для показу віддалених гілок, які не були об'єднані в головний:

git branch -r --merged master

git branch -r --no-merged

19
або -aпобачити одночасно віддалені та локальні
Simon Forsberg

1
Чи повинен цей останній бути git гілка -r - не злитий господар?
MortimerCat

28

Якщо гілку вже об’єднано, її знову злиття нічого не призведе. Тож вам не доведеться турбуватися про «повторне об’єднання» гілок, які вже об’єднані.

Щоб відповісти на ваше запитання, ви можете просто видати

 git branch --merged

побачити злиті гілки або

 git branch --no-merged

щоб побачити незамуровані гілки. Ваша поточна філія має на увазі, але ви можете вказати інші відділення, якщо бажаєте.

 git branch --no-merged integration

покаже вам гілки, які ще не об'єднані у integrationгілку.


1

Наведений нижче сценарій знайде всі 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

Оновлена ​​версія сценарію


0
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;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.