Исторически считайте неразделенные ветви git - PullRequest
0 голосов
/ 27 апреля 2018

Я понимаю, что в настоящее время я могу получить ветки в master в git с

git branch -r --no-merged master

Что если я хочу увидеть то же самое для исторического коммита, но учесть состояние ветвей в то время (включая ветви, которые были с тех пор удалены), а не текущие ветки?

И, в конце концов, все, что мне нужно, это счет. В конечном итоге я пытаюсь ответить на этот вопрос:

За каждый день в истории git-репо (или за последние X дней / месяцев), сколько существовало филиалов, которые были объединены в этот день?

Редактировать: Для ясности, мне нужно только количество незаряженных веток с учетом определенного коммита. Мне не нужны названия филиалов. То есть если бы я мог взять сечение вывода журнала, который графически показывает историю, и подсчитать строки, которые представляют все ветви при любом заданном коммите, я был бы в хорошей форме. Я просто не хочу создавать это, если у кого-то уже есть.

Редактировать 2: Как насчет подсчета коммитов, которые старше, чем рассматриваемый коммит, имеют общего родителя и вычитают те, у которых более одного родителя. Смотрите эту диаграмму: enter image description here

1 Ответ

0 голосов
/ 28 апреля 2018

Создание / удаление ветки не записывается в репозитории Git (не говоря уже о том, что вы можете переименовать ветку в любое время, переместить ее или сбросить в любое время)

Единственная запись, которую вы можете найти, для времени , находится в git reflog (записи удаляются через 90 дней).

Репозиторий git хранит только историю коммитов и связанный с ними график ( the DAG ). Ветви - это только эфемерные указатели на точки на этом графике, чтобы облегчить работу с ним.


Что касается «подсчета коммитов» для определения неслитых ветвей (для данного прошлого коммита), вы можете рассмотреть псевдоалгоритм:

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 , чтобы найти общего предка.
Если этот общий предок старше рассматриваемого коммита: сосчитайте другую ветвь.
Если нет, не считайте это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...