Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何列出git回购中所有合并的源分支和目标分支?_Git_Version Control_Merge - Fatal编程技术网

如何列出git回购中所有合并的源分支和目标分支?

如何列出git回购中所有合并的源分支和目标分支?,git,version-control,merge,Git,Version Control,Merge,我试图对我们的git存储库进行分析。我想比较一下开发分支中的合并和发布周期。例如,要查看人们是否在等待周期结束时才合并更改 要做到这一点,我想得到所有合并到“开发”分支的列表,合并分支的名称这让我知道合并的是功能还是缺陷,日期时间,作者和更改的文件数 我首先通过以下方式为所有提交提取一个SHA列表: git日志-pretty=格式:%H 然后逐个循环浏览这些内容,查看它们是否是合并,使用: git show-摘要-格式=%p$SHA 父级大于1的提交是合并。然而,我不知道如何将其缩小到只合并到开

我试图对我们的git存储库进行分析。我想比较一下开发分支中的合并和发布周期。例如,要查看人们是否在等待周期结束时才合并更改

要做到这一点,我想得到所有合并到“开发”分支的列表,合并分支的名称这让我知道合并的是功能还是缺陷,日期时间,作者和更改的文件数

我首先通过以下方式为所有提交提取一个SHA列表:

git日志-pretty=格式:%H

然后逐个循环浏览这些内容,查看它们是否是合并,使用:

git show-摘要-格式=%p$SHA

父级大于1的提交是合并。然而,我不知道如何将其缩小到只合并到开发中,也不知道如何识别被合并分支的名称

我考虑分析总结:

git show-s-格式=%s$SHA

寻找一种模式,如:

将分支机构合并到“开发”中

但在某些情况下,总结似乎被覆盖了。例如,我发现一个大于1个父提交的合并,其摘要如下:

yay单元测试

我已经探索了如何解析git日志图和reflog,但没有取得任何进展


是否可以确定git合并的源和目标分支名称?

合并只是提交一个以上的父级。合并两侧都没有指示分支名称的保留数据,因为分支只是指向特定提交的指针。如果提交消息中没有保留分支名称,则该信息可能会丢失,但请参阅下面关于reflog的注释

例如,如果您有一个类似于以下箭头的图形,则箭头从子级指向父级:

                /- D <-\
A <-- B <-- C <-+      +- F
                \- E <-/
你们有两个分支,master指向F,feature-x指向E,你们可以推测D是针对master的,E是针对feature-x的

但情况可能并非如此——可能D是在其他分支上提交的,而master后来通过该分支进行了快进

一旦feature-x被合并到master中,快进到F,那么就没有多少信息可以告诉您E是针对feature-x提交的。此时,提交D和E与任何分支都没有特别的关系

不过,我只讨论在推送/获取时同步的信息。你用reflog提出了一个有趣的观点。通过检查每个分支的reflog,并使用每个reflog条目将特定提交与该分支相关联,您可能能够重建此信息,因此理论上可以重建此信息,或者至少可以重建存储库的特定视图。另一个克隆可能包含与您试图在此处实现的更高级别视图冲突的reflog数据。新克隆将没有用于重建此历史记录的有用数据


您可能需要编写自己的脚本来进行此分析:对于每个分支,对于每个reflog条目,将reflog条目的commit与该分支相关联。现在看看每个合并的父级,如果每个父级或父级的某个祖先都有关联,那可能就是合并的分支。

我明白了。忘记分支名称是否可以过滤掉合并到特定分支中的提交?说只合并到我的开发分支?@ChrisSeltzer由于同样的原因,这不可能直接实现-但请查看我对reflog的编辑。git中的分支是短暂的,删除后不会留下永久的痕迹。好吧,除了在分支上完成的提交之外,假设这些提交被合并到仍然存在的分支中。提交中的任何内容都不会记录在哪个分支上提交。当然,您可以引入特定的方法来格式化提交消息以记录这些信息,但git对此并不关心。如果你以后想提取这类信息,那就靠你自己了。可以将git分支看作是一个post-it注释,它只标记分支当前所在的位置。