git 检查提交是否是从 master 合并提交

Daw*_*awe 5 git jenkins

我正在构建 jenkins 工作,并且正在制作修补程序。我有合并到 master 的修补程序分支,然后这个提交被标记为次要版本。这个工作是将master合并到develop之后。我需要检测这个提交。如果它来自 master 的合并,则使用标记版本构建它。如果不是,只需构建最新的。有没有简单的方法来检测它是否是来自 master 的合并提交?

Ale*_*gne 4

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

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

背景

\n\n

在 git 中,合并仅仅意味着一次提交有多个父提交。

\n\n
    \n
  • 该命令git rev-list --parents -n 1 $commit_hash返回一组提交哈希值,它们是此提交的父级。

  • \n
  • 为了检查是否有超过 2 个父母*,wc -w <<< $parent_hashes需要进行测试。

  • \n
  • 通过管道xargsgit name-rev将收集每个提交引用的名称,以便我们可以测试它是否是master\xe2\x80\x93 这就是grep -e (fancy regex)命令的作用

  • \n
\n\n

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

\n\n

免责声明

\n\n

该脚本尚未准备好用于生产。可能有一些我没有考虑到的边缘情况;如果您发现任何问题,请给我留言,我会更正这个答案。

\n\n
\n\n

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

\n