考虑以下历史:
#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。这些合并的提交消息包含问题键:
现在,我想找出一些问题,并列出他们介绍的提交:
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实现?
发布于 2021-02-06 14:28:34
从我在评论中看到的情况来看,您遇到的第一个障碍是找到所有想要git cherry-pick的提交。正如@torek所建议的那样,可以很容易地使用git log或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简单解释一下它所做的工作:它遍历输入参数$@,并添加与您传递的特性ids相同的--grep。然后计算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一旦你到了这里,偷工减料应该是相当简单的。
https://stackoverflow.com/questions/66036218
复制相似问题