我要做的是确保我可以安全地删除本地分支。
我在这里找到了这个问题的一些很好的答案:
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/