我必须从未合并的分支创建一些代码审查。
在寻找解决方案时,我们不要讨论本地分支上下文问题,因为这将在服务器上运行;只有源站远程,我将始终在其他命令之前运行git fetch 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获得它们的散列值。
我如何处理这种情况?

最佳答案

可以使用--mirror克隆存储库,它创建一个可以用作原始存储库镜像的裸存储库,并可以使用git remote update --prune更新存储库,之后应删除此功能的所有标记。
我是这样实现的:
1。获取未合并到master中的分支的列表

git branch --no-merged master

2。对于每个分支,获取该分支而不是主分支的修订列表
git rev-list branch1 --not master --no-merges

如果列表为空,请从分支列表中删除分支
三。对于每次修订,使用
git name-rev --name-only revisionHash1

并将regex与^([^\~\^]*)([\~\^].*)?$匹配。第一个模式是分支名称,第二个模式是分支的相对路径。
如果找到的分支名称不等于初始分支,请从列表中删除修订。
最后,我得到了一个分支列表,每个分支都有一个提交列表。
在进行了更多的bash研究之后,可以使用以下方法在一行中完成所有工作:
git rev-list --all --not master --no-merges | xargs -L1 git name-rev | grep -oE '[0-9a-f]{40}\s[^\~\^]*'

结果是表单中的输出
hash branch

它可以被读取、解析、排序、分组或其他。

关于git - 如何查找master中所有未 merge 的提交按照创建的分支分组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15589862/

10-09 06:48
查看更多