git - 通过提交消息搜索拉取请求/合并并挑选所有相应的提交
问题描述
考虑以下历史:
#1 #2 #3 PR no.
-O-----A-----B-----C commits on master (merges)
\ / \ / \ /
1-2 3-4 5-6 commits on branches
可以看出,有 3 个 PR,通过提交 A、B、C 合并。这些合并的提交消息包含问题密钥:
- A:“合并 FIB-13 ......”
- B:“合并 FIB-21……”
- C:“合并 FIB-34……”
现在我想搜索某些问题并获取他们引入的提交列表:
Input: List of issue keys
Output: List of commits from PRs
Example
-------
Input: FIB-13, FIB-34
Output: 1, 2, 5, 6
之后,我想将这些提交挑选到另一个分支中,逐个提交:
-1-2-5-6 another branch
有没有一种好的方法来编写脚本和/或可以通过 IntelliJ 的 Git 客户端或 Sourcetree 来实现?
解决方案
从我在评论中读到的内容来看,您遇到的第一个障碍是找到您想要的所有提交git cherry-pick
。正如@torek 所提议的,它可以很容易地用git log
or来完成git rev-list
。基本上是这样的:
#!/bin/bash
first_log="git rev-list --reverse --merges"
for feature in $@
do
first_log+=" --grep=\"^Merge ${feature}\""
done
for cmt in $(eval "$first_log master")
do
git log --format="%h: %s" --reverse ${cmt}^2 ^${cmt}^1
done
简要说明它的作用:它循环输入参数$@
,并添加与--grep
您传递的特征 ID 一样多的特征。然后它评估git rev-list
命令,对于找到的每个合并提交,它检索属于合并提交的第二个父级的所有提交,这是功能分支提示,但无法从合并提交的第一个父级访问,这是前一个在主分支中提交:${cmt}^2 ^${cmt}^1
. 这样做的好处是它甚至可以找到源自功能分支的子分支的提交。
要获得相反的时间顺序,您只需--reverse
向两者添加选项git log
和git rev-list
。
输入样本:
./script.sh FIB-13 FIB-34
输出样本:
429ab60: 1
c458a31: 2
1c0d098: 5
3bd087c: 6
一旦你到达这里,樱桃采摘应该很简单。
推荐阅读
- pine-script - 如何将其转换为常量以将其提供给 pinescript 中的最高函数
- python - 如何设置访问令牌oauth2的到期时间
- elasticsearch - 如何在弹性搜索中过滤大量嵌套文档?
- javascript - UI - 反应如何在同一行中添加图像
- jquery - 使用 jquery 将 html 对象的可见性传递给 ASP 经典
- python - 无法在烧瓶 restapi 中输出 status_code
- android - 如何检测应用程序何时被android中的用户关闭?
- javascript - 解构数组
- spring - 在子表内部如何在更新记录时更改外键?
- c# - C# .NET5 单文件应用程序从目录中读取和解析 Json / Txt 或其他文件格式