检查分支是否已合并到远程的master或dev分支中

时间:2018-07-16 05:52:56

标签: git git-merge merge-base

我要做的是确保我可以安全地删除本地分支。

我在这里找到了一些很好的答案:

How can I know in git if a branch has been already merged into master?

所以我们有源分支和目标分支。源分支是可能已经或可能不会完全合并到目标分支的分支。

上面链接中答案的问题是,如果目标分支与源分支合并后有新的提交,则答案似乎不起作用。

我有一个运行良好的脚本,但似乎只有在所有分支都共享同一技巧时,它才能起作用。不过,该脚本在理论上是可行的,因为您只是想查看本地分支的提示是否作为提交包含在远程分支的历史记录中的某个位置,因此应该不难发现。

#!/usr/bin/env bash


green='\033[1;32m'
red='\e[31m'
no_color='\033[0m'


branch="${1:-HEAD}"

branch_name=`git rev-parse --abbrev-ref $branch`;

git fetch origin dev;
git fetch origin master;


merge_base="$(git merge-base $branch origin/dev)"
merge_source_current_commit="$(git rev-parse $branch)"


if [ "$merge_base" != "$merge_source_current_commit" ]; then
    echo -e "${red}Branch with name '$branch_name' is not completely merged with origin/dev.${no_color}";
    exit 1;
else
    echo -e "${green}Branch with name '$branch_name' is merged with origin/dev, now checking against origin/master${no_color}";
fi

merge_base="$(git merge-base $branch origin/master)"

if [ "$merge_base" != "$merge_source_current_commit" ]; then
    echo -e "${red}Branch with name '$branch_name' is not completely merged with orign/master.${no_color}";
    exit 1;
fi


echo -e "${green}branch with name '$branch_name' is completely merged with origin/dev and origin/master.${no_color}"

echo "To delete this branch run: git branch -d '$branch_name'"

有人知道为什么目标分支与源分支合并后如果获得新的提交将不起作用吗?

1 个答案:

答案 0 :(得分:2)

使用以下更简单的方法来测试“本地分支的尖端是否作为提交包含在远程分支的历史记录中”:

id:11

但是我不能说它会更好,因为我无法重现您原来的问题。