【发布时间】:2013-03-13 11:05:04
【问题描述】:
我必须从未合并的分支创建一些代码审查。
在寻找解决方案时,我们不要去解决本地分支上下文问题,因为这将在服务器上运行;将只有 origin 远程,我总是会在其他命令之前运行 git fetch origin 命令,当我们谈论分支时,我们将参考 origin /分支名称。
如果设置很简单,并且源自 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 获取它们的哈希。
我该如何处理这种情况?
【问题讨论】:
标签: git branch commit branching-and-merging