我必须从未合并的分支创建一些代码审查。
在寻找解决方案时,我们不要去解决本地分支上下文问题,因为这将在服务器上运行;将只有origin远程,我总是在其他命令之前运行git fetch origin命令,当我们谈论分支时,我们将参考origin/branch-name。
如果设置很简单,并且源自 master 的每个分支都以自己的方式继续,我们可以运行:
git rev-list origin/branch-name --not origin/master --no-merges
对于每个未合并的分支,并将生成的提交添加到每个分支的每个审查中。
当 2-3 个分支之间存在合并并且其中一些分支继续工作时,就会出现问题。正如我所说,对于每个分支,我想以编程方式创建代码审查,并且我不想在多个审查中包含提交。
主要是在为每个提交找到原始分支时问题减少了。
或者更简单地说……找到所有未合并的提交,这些提交按最可能创建它们的分支分组。
让我们关注一个简单的例子:
* b4 - branch2's head
* | a4 - branch1's head
| * b3
* | merge branch2 into branch1
* |\ | m3 - master's head
| * \| a3
| | |
| | * b2
| * | merge master into branch1
* /| | m2
|/ | * merge branch1 into branch2
| * /| a2
| |/ |
| | * b1
| | /
| |/
| /|
|/ |
| * a1
* / m1
|/
|
* start
我想要得到的是:
- 分支 1:a1、a2、a3、a4
- 分支 2:b1、b2、b3、b4
到目前为止,我发现的最佳解决方案是运行:
git show-branch --topo-order --topics origin/master origin/branch1 origin/branch2
并解析结果:
* [master] m3
! [branch1] a4
! [branch2] b4
---
+ [branch2] b4
+ [branch2^] b3
+ [branch1] a4
++ [branch2~2] b2
-- [branch2~3] Merge branch 'branch1' into branch2
++ [branch2~4] b1
+ [branch1~2] a3
+ [branch1~4] a2
++ [branch1~5] a1
*++ [branch2~5] m1
输出解释是这样的:
- 前n行是分析的n 个分支
- 一行与----
- 如果该提交在第 n 个分支上,则每个提交在第 n 个缩进字符上带有一个加号(或在合并提交的情况下为减号)。
- 最后一行是分析的所有分支的合并基础
对于第 3 点,提交名称解析以分支名称开头,据我所见,此分支对应于在其上创建提交的分支,可能是通过促进第一父级到达的路径。
由于我对合并提交不感兴趣,因此我将忽略它们。
然后我将解析每个分支路径提交以使用 rev-parse 获取它们的哈希。
我该如何处理这种情况?