历史上如何计算未合并的Git分支

3
我知道可以使用以下命令在git中获取当前未合并到master的分支: git branch -r --no-merged master 那么如果我想查看历史提交时相同的内容,但考虑到当时的分支状态(包括已删除的分支)而不是当前分支呢?
最终我只需要一个计数。 我试图回答以下问题:
对于git存储库历史记录中的每一天(或过去X天/月),有多少分支存在于该日未合并到主分支?
编辑:清楚起见,我只需要给定特定提交的未合并分支计数。 我不需要分支名称。 也就是说,如果我可以截取显示历史记录图形的日志输出,并计算表示任何给定提交时所有分支的行数,我就可以了。 如果有人已经做了这个工作,我只是不想重复劳动。
编辑2:如何计算早于所询问的提交且具有共同父项的提交,然后减去具有多个父项的提交?请参见此图示:enter image description here

你知道你无法知道一个分支是何时创建的。你只能“看到”每个分支中最后一次提交的日期。 - CodeWizard
我可以找到两个提交之间的共同祖先,并且我可以看到分支合并的位置,所以我认为这应该是可能的。 - devguydavid
共同祖先指的是“此分支更新到哪个提交”,而不是它创建的时间。 - CodeWizard
好的观点。也许这是不可能的... - devguydavid
1个回答

1
分支的创建和删除在Git存储库中没有记录(更不用说您可以随时重命名、移动或重置分支)。您唯一能找到的记录,在一段时间内,是在git reflog中(记录将在90天后被修剪)。Git存储库仅保留提交历史记录及其相关图形(有向无环图)。分支只是指向该图形中某些点的短暂指针,以方便处理它。
关于通过“计算提交次数”来确定未合并的分支(针对给定的过去提交),您可以考虑以下伪代码算法:
n=0
for each branch b
  if c is part of b
    continue
  fi
  ca=common_ancestor(branch_of_c, b)
  if ca older than c
    n=n+1
  fi
fi

关键部分是使用git merge-base来查找共同的祖先。
如果该共同祖先比正在考虑的提交更早:计算另一个分支。
否则,不计算它。

谢谢回复。我在问题中添加了一个澄清。实际上,我只需要一个计数,这应该可以通过跟随DAG来发现。我的git技术不够强大,不知道正确的方法。 - devguydavid
这就是我的回答要点:你做不到。DAG 不会保留分支信息。 - VonC
@devguydavid 根据您编辑后的问题,我提出了一个伪算法来实现该分支计数。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接