マージされていない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
あなたがマージした場合foomaster、それはで表示されますgit branch --merged masterリスト。しかし、もう一度コミットするとどうなりますfooか?新しいコミットがあるにもかかわらず、ある時点でマージされたmasterかのように、リストに表示されなくなりましたか、それとも表示されますか?
Craig Otis

11
@CraigOtisリストに表示されなくなります。--merged指定されたブランチに完全にマージされるブランチのみをリストします。
アンバー

そしてgitk --remotes --not origin/masterあなたのマスターにマージされていない各ブランチ上のコミットを表示します。
ヨーヨー

5
これを想像してみてください...理解しやすく使いやすいgitの答えです!
jleach

1
ブランチをチェックアウトせずにリストを取得する方法はありますか?サーバーをポイントしてリストを取得するようなものですか?
xbmono

57

-rパラメーターを使用して、マスターにマージされなかったリモートブランチを表示することもできます。

git branch -r --merged master

git branch -r --no-merged

19
または-a、リモートとローカルの両方を同時に表示するには
Simon Forsberg、2014年

1
最後のものはgit branch -r --no-merged masterですか?
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;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.