git - 检查分支是否已经 merge 到远程的 master 或 dev 分支中

标签 git git-merge merge-base

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

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

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

所以我们有源分支和目标分支。源分支可能已经完全 merge 到目标分支中,也可能未完全 merge 到目标分支中。

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

我有一个运行良好的脚本,但它似乎只有在所有分支共享相同的提示或其他情况时才有效。不过,该脚本在理论上是有效的,因为您只是想查看本地分支的提示是否作为提交包含在远程分支历史记录中的某处,所以应该不难弄清楚。

#!/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'"

有谁知道如果目标分支在与源分支 merge 后得到新的提交为什么不能工作?

最佳答案

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

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

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

关于git - 检查分支是否已经 merge 到远程的 master 或 dev 分支中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51355331/

相关文章:

Git 警告 : LF will be replaced by CRLF

git - 推送时是否需要在远程主机上安装 git?

git merge 不创建 merge 提交,没有 MERGE_HEAD

git - 如何将功能分支 merge 到主分支中,以便新的更改也反射(reflect)出来

git - "git merge --squash"的正确用例是什么?

git: pull 特定分支,只保留最新的树(没有任何历史记录)

ruby-on-rails - rails 日志问题

android - Android Studio 中的智能 merge 有什么作用?

git merge-base 不适用于 merge 的分支