Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.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_Git Log - Fatal编程技术网

Git日志合并提交与多个提交合并

Git日志合并提交与多个提交合并,git,git-log,Git,Git Log,我想列出去年合并的提交。所以我用这个: git log --reverse --since=2016-01-01 --until=2016-12-31 --merges 然而,这带来了大量的合并,我只想列出那些在主分支中合并的次数超过提交次数的合并 存储库中使用的流是 理想情况下,我希望能够列出合并了至少N个提交的合并。这需要定义合并N个提交的含义,因为有两个明显的定义,我认为第一个明显的定义是错误的,但我不确定第二个明显的定义是否正确 首先,让我们注意一个合并提交—这些是由选定的—merge

我想列出去年合并的提交。所以我用这个:

git log --reverse --since=2016-01-01 --until=2016-12-31 --merges
然而,这带来了大量的合并,我只想列出那些在主分支中合并的次数超过提交次数的合并

存储库中使用的流是


理想情况下,我希望能够列出合并了至少N个提交的合并。

这需要定义合并N个提交的含义,因为有两个明显的定义,我认为第一个明显的定义是错误的,但我不确定第二个明显的定义是否正确

首先,让我们注意一个合并提交—这些是由选定的—merges是任何具有两个或更多父级的提交。这是合并的名词形式,如中所定义

由于父级的数量很容易计算,我们可以将合并N个提交的合并定义为至少有N-1个父级的合并。然后,所有合并将至少合并1个提交,而合并2个提交的合并将有3个父级。请注意,3个或更多父级合并也称为八达通合并。例如,找到以下内容很简单:git rev list-min parents=3。使用-merges with git log或git rev list这两个命令基本相同,默认输出略有不同,只是-min parents=2的缩写,即仅选择属于合并提交的提交

不过,你大概不是这个意思。这让我们得到了另一个明显的定义,但它,嗯,不那么明显

和往常一样,我们需要从绘制提交图开始。在运行git merge的典型情况下,您会遇到如下情况:

...--o--*--o--o--o      <-- main
         \
          o--o----o     <-- feature
在本例中,合并的提交数是三个:有三个提交在功能上,而不是在主功能上。有很多提交都是从*开始,然后向左进行的,每次提交都会返回到有史以来的第一次提交,可能之前在两个分支上都有。现在,功能上的三个提交也在两个分支上

但是这个图表非常简单。这里有一个不是很复杂,但也不是很简单:

...--o--*--o   <-- main
         \
          \      o   <-- fix1
           \    / \
            o--o   o--o   <-- feature
                \ /
                 o   <-- fix2
这用于选择提交M的所有父级:

其他父级速记符号 另外还有两种缩写,对于合并提交尤其有用,例如 命名由提交及其父提交组成的集

r1^@符号表示r1的所有父代。[剪报]

因此,我们要求git rev list查找所有父级可以访问的所有提交,不包括第一个父级可以访问的所有提交。不必从第一个参数中排除第二个参数,即M^1集,因为排除第二个参数集会处理它。这是因为M^1(M的第一个父级)始终是运行git merge之前在分支上的提交。因此,通过父级2-to-P引入的提交将被计算在内,同时还包括当时不在分支上的所有祖先

对于我的第一个图表,计数是3,对于我的第二个图表,计数是6。如果这些不是你想要的计数,你将不得不改进你的问题

将这个git rev list-count步骤放在一个脚本中,该脚本在从git rev list-merges-获得的提交ID上运行,因为-直到…,然后选择结果计数至少为您选择的限制的值。将提交哈希的最终列表馈送到git log-no walk-stdin以查看它们

...--o--*--o   <-- main
         \
          \      o   <-- fix1
           \    / \
            o--o   o--o   <-- feature
                \ /
                 o   <-- fix2
git rev-list --count M^@ ^M^1