查找未合并的 Git 分支?

331

我有一个包含许多分支的Git存储库,其中一些已经合并,而另一些则还没有。由于分支数量相当大,我应该如何确定哪些分支尚未被合并?我想避免进行"章鱼"合并并重新合并已经合并的分支。


6
起初我对“章鱼合并”的术语感到好笑。但是如果你和我一样不知道的话,这是一种正式的合并策略的官方名称 :-) 请参见https://git-scm.com/docs/git-merge 或 https://www.atlassian.com/de/git/tutorials/using-branches/merge-strategy - observer
4个回答

559

试试这个:

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

6
如果你将foo合并到master,它将出现在git branch --merged master列表中。但是,如果你再次提交到foo会发生什么?它是否不再出现在该列表中,还是即使有新的提交,它仍然会出现在该列表中,因为它曾经被合并到master - Craig Otis
12
它将不再出现在列表中。“--merged”仅列出已完全合并到给定分支的分支。 - Amber
8
想象一下...一个易于理解和使用的 Git 答案! - jleach
2
有没有一种方法可以在不检出分支的情况下获取列表?比如指向服务器然后获取列表? - xbmono
2
据我所知,git branch --no-merged master 只显示我的本地分支。它不会显示任何在我的电脑上没有检出并由其他人创建的分支。 - Anton Danilchenko
显示剩余3条评论

81

你也可以使用-r参数来显示未合并到主分支的远程分支:

git branch -r --merged master

git branch -r --no-merged

                         

27
或者使用 -a 命令同时查看远程和本地。 - Simon Forsberg
1
最后一个应该是 git branch -r --no-merged master 吗? - MortimerCat

31

如果一个分支已经合并,再次合并它将不会产生任何影响。 因此,您不必担心“重新合并”已经合并的分支。

回答您的问题,您可以简单地发出

 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

链接已经失效了…… - jtlz2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接