使用git merge / git merge-base,可靠地确定分支是否为功能分支

时间:2018-08-11 01:57:51

标签: git git-merge

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

检查集成分支是否已创建某个分支的可靠方法是什么?

相对于母版分支还是其他分支?

我不确定该怎么做。

2 个答案:

答案 0 :(得分:1)

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

例如,如果主分支分别命名为masterdevelop,则可以在要素分支和每个主分支之间找到合并基础:

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

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

答案 1 :(得分:0)

尽管找到“分支父母”并不总是那么容易,但在大多数情况下还是可以的。

因此,一种方法是应用“ Find the parent branch of a Git branch”的配方之一。

git show-branch -a \
| grep '\*' \
| grep -v `git rev-parse --abbrev-ref HEAD` \
| head -n1 \
| sed 's/.*\[\(.*\)\].*/\1/' \
| sed 's/[\^~].*//'