历史上计算未合并的git分支

时间:2018-04-27 20:21:30

标签: git

我知道我可以使用

将目前未绑定的分支转换为git中的master

git branch -r --no-merged master

如果我想在历史提交中看到相同内容但是考虑当时的分支状态(包括已删除的分支)而不是当前分支,该怎么办?

最后我需要的只是一个计数。最终,我试图回答这个问题:

对于git repo(或过去X天/月)历史中的每一天,有多少分支存在于当天未合并掌握?

编辑:要明确我只需要一个特定提交的未合并分支计数。我不需要分支名称。即如果我可以采用以图形方式显示历史记录的日志输出的横截面,并计算在任何给定提交中代表所有分支的行,我将处于良好状态。如果某人已经拥有,我只是不想构建它。

编辑2:计算比有问题的提交更早的提交并拥有共享父级并减去具有多个父级的提交。请参见此图表:enter image description here

1 个答案:

答案 0 :(得分:1)

分支创建/删除不记录在Git仓库中(更不用说您可以随时重命名分支,移动分支或随时重置分支)

您可以找到一段时间的唯一记录位于git reflog(记录会在90天后修剪)。

git repo仅保留提交的历史记录及其关联图(the DAG)。分支只是该图中点的短暂指针,以便于使用它。

至于#34;计算提交"要确定非合并分支(对于给定的过去提交),您可以考虑伪算法:

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

关键部分是use git merge-base以找到共同的祖先 如果该共同祖先比所考虑的提交更旧:计算另一个分支 如果没有,请不要计算。