Git检查提交是否为主分支的合并提交

5

我正在构建Jenkins作业并进行热修复。我有一个热修复分支,该分支已合并到主干,然后该提交被标记为次要版本。此后,作业将主干合并到开发分支。我需要检测这个提交。如果它来自主干的合并,则使用带有标记版本的构建进行构建。否则,只需构建最新的版本。是否有简单的方法检测它是否是从主干合并的提交?


如果您发现这个答案有帮助,请考虑接受它。 - Alexandre Cassagne
1个回答

4

尝试使用以下代码片段来测试提交是否为合并提交。

#!/bin/bash
commit_hash=$(git rev-parse HEAD)
parent_hashes=`git rev-list --parents -n 1 $commit_hash`
parent_count=`wc -w <<< $parent_hashes`
if [[ $parent_count -gt 2 ]]
then
  p=`git name-rev $parent_hashes | xargs -0 | grep -e '^\S\+ master$'`
  if [[ ! -z $p ]]
  then
    echo "merged; master"
    exit 0
  else
    echo "merged; non-master"
    exit 2
  fi
else
  echo "not merged"
  exit 1
fi

背景

在git中,合并指的是一个提交有多个父节点。

  • 命令git rev-list --parents -n 1 $commit_hash返回一组父提交的哈希值。

  • 通过测试wc -w <<< $parent_hashes可以检查是否存在超过2个父节点*。

  • 将其通过管道传递给xargsgit name-rev将收集每个提交的引用名称,以便我们可以测试它是否为master - 这就是grep -e(高级正则表达式)命令的作用。

最后,该命令会打印一些调试文本,并根据情况返回退出代码。

免责声明

此脚本不适用于生产环境。可能存在我没有考虑到的一些边缘情况;如果您发现任何问题,请给我留言,我会更正这个答案。


* 注意。 git rev-list --parents [...] 还返回此提交的哈希值。我没有调查原因,但如果您知道,请告诉我!


不仅可以使用 grep -e '^\S\+ master$' 搜索主分支,我们还可以如何检查 origin/master 分支。 - Biswajit Maharana
应该是==2而不是大于2,对吧? - justin.m.chase

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接