首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过提交消息搜索拉请求/合并,并选择所有相应的提交。

通过提交消息搜索拉请求/合并,并选择所有相应的提交。
EN

Stack Overflow用户
提问于 2021-02-03 21:49:04
回答 1查看 381关注 0票数 1

考虑以下历史:

代码语言:javascript
复制
      #1    #2    #3   PR no.

-O-----A-----B-----C   commits on master (merges)
  \   / \   / \   /
   1-2   3-4   5-6     commits on branches

可以看到,通过提交A、B、C合并了3个PR。这些合并的提交消息包含问题键:

  • A:“合并FIB-13”
  • B:"Merge FIB-21 .“
  • C:"Merge FIB-34 .”

现在,我想找出一些问题,并列出他们介绍的提交:

代码语言:javascript
复制
Input: List of issue keys
Output: List of commits from PRs

Example
-------

Input: FIB-13, FIB-34
Output: 1, 2, 5, 6

之后,我想把这些提交转到另一个分支,提交:

代码语言:javascript
复制
-1-2-5-6   another branch

是否有一个好的方式来编写脚本和/或这可以通过IntelliJ的Git客户端或Sourcetree实现?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-06 14:28:34

从我在评论中看到的情况来看,您遇到的第一个障碍是找到所有想要git cherry-pick的提交。正如@torek所建议的那样,可以很容易地使用git loggit rev-list来完成。基本上是这样的:

代码语言:javascript
复制
#!/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

简单解释一下它所做的工作:它遍历输入参数$@,并添加与您传递的特性ids相同的--grep。然后计算git rev-list命令,对于找到的每个合并提交,它检索属于合并提交的第二个父级的所有提交,这是特性分支提示,但不能从合并提交的第一个父节点(即主分支中的前一个提交:${cmt}^2 ^${cmt}^1 )中检索。这样做的好处是,它甚至发现来自特性分支的子分支的提交。

要获得相反的时间顺序,只需将--reverse选项添加到git loggit rev-list中即可。

输入样本:

代码语言:javascript
复制
./script.sh FIB-13 FIB-34

输出样本:

代码语言:javascript
复制
429ab60: 1
c458a31: 2
1c0d098: 5
3bd087c: 6

一旦你到了这里,偷工减料应该是相当简单的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66036218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档