311

我有一个包含许多分支的 Git 存储库,其中一些已经合并,有些没有。由于分支的数量很大,如何确定哪些分支尚未合并?我想避免必须进行“章鱼”合并和重新合并已经合并的分支。

4

4 回答 4

519

尝试这个:

git branch --merged master

它按照它在罐子上所说的做(列出已合并到的分支master)。您还可以使用以下方法提取逆:

git branch --no-merged master

如果您不指定master,例如..

git branch --merged

然后它将向您显示已合并到当前的分支HEAD(因此,如果您在master,则相当于第一个命令;如果您在foo,则相当于git branch --merged foo)。

您还可以通过指定-r标志和要检查的 ref 来比较上游分支,可以是本地的或远程的:

git branch -r --no-merged origin/master
于 2012-09-05T06:57:15.193 回答
63

您还可以使用该-r参数显示未合并到 master 的远程分支:

git branch -r --merged master

git branch -r --no-merged

                         
于 2014-04-22T16:32:29.687 回答
28

如果一个分支已经合并,再次合并它不会做任何事情。所以你不必担心“重新合并”已经合并的分支。

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

 git branch --merged

查看合并的分支或

 git branch --no-merged

查看未合并的分支。您当前的分支是隐含的,但您可以根据需要指定其他分支。

 git branch --no-merged integration

将向您显示尚未合并到分支中的integration分支。

于 2012-09-05T06:57:36.903 回答
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

脚本的最新版本

于 2017-07-13T12:26:36.283 回答