首页 > 解决方案 > 使用 git merge / git merge-base,可靠地确定分支是否是功能分支

问题描述

假设我们遵循 gitflow 分支模型,其中功能分支是从集成分支创建的。

检查某个分支是否是从集成分支创建的一种相当可靠的方法是什么?

而不是从master分支或其他什么?

我不知道该怎么做。

标签: gitgit-merge

解决方案


假设您知道所有集成和发布分支的名称,您可以找到所有合并库并按时间戳比较(或排序)它们。

例如,如果主分支被命名为masterand develop,您可以在特征分支和每个主分支之间找到合并基:

branch_name="feature/feature-1"
is_feature_branch=false

git checkout $branch_name

mb_develop=$( git merge-base HEAD develop )
mb_master=$( git merge-base HEAD master)

ts_develop=$( git show -s --format=%ct $mb_develop)
ts_master=$( git show -s --format=%ct $mb_master)

if (( $ts_develop > $ts_master ))
then
    is_feature_branch=true
fi

诚然,如果有更多的主分支(例如,develop、master、release/1.0、release/1.1 等)或者您不知道存储库中每个主分支的名称,这种方法可能会出现问题。


推荐阅读