【问题标题】:Checking if branch has already been merged into master or dev branches on remote检查分支是否已经合并到远程的 master 或 dev 分支
【发布时间】:2018-12-23 14:49:56
【问题描述】:

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

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

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'"

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

【问题讨论】:

    标签: git git-merge merge-base


    【解决方案1】:

    有一种更简单的方法可以测试“本地分支的提示是否作为提交包含在远程分支的历史记录中”,方法是:

    if [ git merge-base --is-ancestor source destination ] ...
    

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

    【讨论】:

      猜你喜欢
      • 2015-01-31
      • 1970-01-01
      • 2013-03-25
      • 1970-01-01
      • 2021-05-17
      相关资源
      最近更新 更多