找到未合并的Git分支?

时间:2012-09-05 06:53:45

标签: git git-merge branching-and-merging

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

5 个答案:

答案 0 :(得分:414)

试试这个:

git branch --merged master

它在tin上执行的操作(列出已合并到master的分支)。您也可以使用以下方式提取反向:

git branch --no-merged master

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

git branch --merged

然后它会显示已合并到当前HEAD的分支(因此,如果您在master上,则它等同于第一个命令;如果您在{{1}上},它相当于foo)。

您还可以通过指定git branch --merged foo标志和要检查的引用(可以是本地或远程)来比较上游分支:

-r

答案 1 :(得分:50)

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

git branch -r --merged master

git branch -r --no-merged

答案 2 :(得分:28)

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

要回答您的问题,您只需发出

即可
 git branch --merged

查看合并的分支或

 git branch --no-merged

看到未合并的分支机构。您的当前分支是隐含的,但如果您愿意,可以指定其他分支。

 git branch --no-merged integration

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

答案 3 :(得分: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

答案 4 :(得分: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;