繁体   English   中英

git检查提交是否是来自master的合并提交

[英]git check if commit is merge commit from master

我正在建立jenkins工作,我正在制作修补程序。 我有一个合并到master的hotfix分支,然后这个提交被标记为次要版本。 这项工作之后是合并大师进入发展。 我需要检测这个提交。 如果它来自master的合并,那么使用标记版本构建它。 如果不是,那就建立最新的。 有没有简单的方法来检测它是否是来自master的合并提交?

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

#!/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返回一组提交哈希值,这些哈希值是此提交的父级。

  • 要检查是否有超过2个父*, wc -w <<< $parent_hashes已经过测试。

  • 通过xargs它, git name-rev将收集每个提交的ref的名称,以便我们可以测试它是否为master - 这就是grep -e (fancy regex)命令所做的

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

放弃

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM