gpt4 book ai didi

git 检查提交是否是来自 master 的 merge 提交

转载 作者:太空狗 更新时间:2023-10-29 14:16:31 25 4
gpt4 key购买 nike

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

最佳答案

尝试将以下代码片段作为脚本来测试提交是否为 merge 。

#!/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 中, merge 仅仅意味着一个提交有多个父级。

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

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

  • 通过管道将其传递给 xargs , git name-rev将收集每个提交的引用的名称,以便我们可以测试它是否是 master – 这就是 grep -e (fancy regex)命令确实

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

免责声明

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


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

关于git 检查提交是否是来自 master 的 merge 提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54867031/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com