dre*_*ecs 17 git branch commit branching-and-merging
我必须从未合并的分支机构创建一些代码审查.
在寻找解决方案时,我们不要去本地分支上下文问题,因为这将在服务器上运行; 只有原点远程,我会在其他命令之前运行git fetch origin命令,当我们谈论分支时,我们将引用origin/branch-name.
如果设置很简单,并且每个源自master的分支继续以自己的方式继续,我们可以运行:
git rev-list origin/branch-name --not origin/master --no-merges
Run Code Online (Sandbox Code Playgroud)
对于每个未合并的分支,并将结果提交添加到每个分支的每个审阅.
当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
Run Code Online (Sandbox Code Playgroud)
而我想要获得的是:
我到目前为止找到的最佳解决方案是运行:
git show-branch --topo-order --topics origin/master origin/branch1 origin/branch2
Run Code Online (Sandbox Code Playgroud)
并解析结果:
* [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
Run Code Online (Sandbox Code Playgroud)
输出解释如下:
对于第3点,提交名称解析以分支名称开头,从我看到,此分支对应于创建提交的分支,可能是通过促进第一父级到达的路径.
由于我对合并提交不感兴趣,我会忽略它们.
然后我将解析每个branch-path-commit以使用rev-parse获取它们的哈希值.
我该如何处理这种情况?
dre*_*ecs 15
可以使用克隆存储库--mirror创建一个裸存储库,该存储库可以用作原始存储库的镜像,并且可以更新,git remote update --prune之后应该删除此功能的所有标记.
我这样实现:
1.获取未合并为master的分支列表
git branch --no-merged master
Run Code Online (Sandbox Code Playgroud)
2.为每个分支获取该分支上的修订列表,而不是主分支中的修订列表
git rev-list branch1 --not master --no-merges
Run Code Online (Sandbox Code Playgroud)
如果列表为空,则从分支列表中删除分支
3.对于每个修订,确定原始分支
git name-rev --name-only revisionHash1
Run Code Online (Sandbox Code Playgroud)
并匹配正则表达式^([^\~\^]*)([\~\^].*)?$.第一个模式是分支名称,第二个模式是分支的相对路径.
如果找到的分支名称不等于初始分支,请从列表中删除修订.
最后,我获得了一个分支列表,并为每个分支提供了一系列提交.
经过一些更多的bash研究,它可以在一行中完成:
git rev-list --all --not master --no-merges | xargs -L1 git name-rev | grep -oE '[0-9a-f]{40}\s[^\~\^]*'
Run Code Online (Sandbox Code Playgroud)
结果是表单中的输出
hash branch
Run Code Online (Sandbox Code Playgroud)
可以读取,解析,排序,分组或其他.
| 归档时间: |
|
| 查看次数: |
5216 次 |
| 最近记录: |