2012-09-05 77 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