2012-09-05 19 views
199

私はgitリポジトリをたくさん持っています。ブランチの数が非常に多いので、どのブランチがまだマージされていないかをどのように知ることができますか?私はタコのマージをやり直して、すべての枝を再び取り戻すことはしません。gitはマージされていないブランチを見つける

答えて

333

はこれを試してみてください:

git branch --merged master 

それは、スズ(masterにマージされているリストの枝)に言うことありません。あなたがまたして逆にプルアップすることができます:あなたはたとえば、masterを指定しない場合

git branch --merged 

...

git branch --no-merged master 

それはあなたが(その現在のHEADにマージされている枝が表示されますmasterの場合は最初のコマンドに相当し、fooの場合はgit branch --merged fooと同じです)。ブランチが既にマージされている場合は、再びそれをマージし、

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

'foo'を' master'にマージすると 'git branch --merged master'リストに表示されます。しかし、もう一度 'foo'にコミットすればどうなりますか?それはもはやそのリストに現れませんか、それとも、新しいコミットがあっても、ある時点で*マスターにマージされていたのでしょうか? –

+6

@CraigOtisそれはもはやリストに現れません。 '--merged'は、指定されたブランチに完全にマージされたブランチのみをリストします。 – Amber

+0

と 'gitk --remotes --not origin/master'は、masterにマージされていない各ブランチのコミットを表示します。 – yoyo

25

ません。

また-rフラグと、ローカルまたはリモートの可能チェック対象の参照を、指定することで、上流の枝を比較することができます何でもする。すでにマージされているブランチを「再マージ」することに心配する必要はありません。

あなたの質問に答えるために、あなたは単純にマージされていない枝を見るためにマージされた枝や

git branch --no-merged 

を見るために

git branch --merged 

を発行することができます。あなたの現在のブランチが暗示されていますが、必要に応じて他のブランチを指定することもできます。

git branch --no-merged integration 

は、まだブランチをintegrationブランチにマージしていないことを示します。

36

ます。また、マスターにマージされていないリモートブランチを示すために-rパラメータを使用することができます。以下のスクリプトは、現在の枝の先にあるすべてのorigin/*枝を見つけるでしょう

git branch -r --merged master 

git branch -r --no-merged 
+14

または '-a'はリモートとローカルの両方を同時に見る –

1

#!/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

関連する問題