2012-09-05 74 views
199

我有一個git倉庫與許多分支,其中一些已經合併,一些沒有。由於分支機構的數量很大,我怎麼知道哪些分支機構尚未合併?我會避免做一個章魚合併重新所有的分支。git發現未分支分支

回答

333

試試這個:

git branch --merged master 

它做什麼它在錫說(已合併到master名單分支機構)。您也可以拉了逆:

git branch --no-merged master 

如果不指定master,如..

git branch --merged 

那麼它會告訴你已經被合併到當前HEAD分支(所以如果您使用的是master,則相當於第一條命令;如果使用的是foo,則相當於git branch --merged foo)。

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

如果你將'foo'合併到'master'中,它會出現在'git branch --merged master'列表中。但是如果你再次提交'foo'會發生什麼?它是否不再出現在該列表中,或者它不會出現,因爲即使它具有新的提交,它在*處被合併到「master」中? –

+6

@CraigOtis它將不再出現在列表中。 '--merged'只列出*完全*合併到給定分支中的分支。 – Amber

+0

和'gitk --remotes --not origin/master'會顯示每個分支上沒有合併爲主的提交。 – yoyo

25

如果分支已經再次合併,合併也不會:

您還可以通過指定-r標誌和裁判覈對,可以是本地或遠程的比較上游分支做任何事情。因此,您不必擔心「合併」已合併的分支機構。

要回答你的問題,你可以簡單地發出

git branch --merged 

看到合併分支機構或

git branch --no-merged 

看到未合併分支。您當前的分支是隱含的,但您可以根據需要指定其他分支。

git branch --no-merged integration 

將向您顯示尚未合併到integration分支的分支機構。

36

您還可以使用-r參數表明,沒有合併到主遠程分支:

git branch -r --merged master 

git branch -r --no-merged 
+14

或'-a'可以同時看到遠程和本地 –

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 

The up-to-date version of the script