Найти, когда филиал был объединен

В Интернете существует множество сценариев, в которых можно удалить уже объединенные ветки например

$ git branch --merged master | grep -v master | xargs -n 1 git branch -d

но я бы хотел, чтобы мои ветки были на некоторое время, прежде чем делать очистку. Итак:

Как я могу найти, когда конкретная ветка была объединена? Я хотел бы получить хэш и дату слияния. Дополнительный кредит за возможность подключения нескольких веток. В конечном итоге я собираюсь

$ git branch --merged master | [find dates for each]
    | [compare dates to arbitrary date] | [delete old merged branches]

Я понимаю, что стандартная практика заключается в том, чтобы тегировать/удалять ветки, которые вы хотите сохранить немного дольше, но если бы я это сделал, я все равно задал бы этот вопрос о хеше и времени слияния.

Edit:

Я просматривал эти темы, потому что мне кажется, что я ищу дочерняя фиксация ссылки на ветку. К сожалению, как упоминалось в этом комментарии, --children добавляет только потомков к коммитам, возвращаемым log или rev-list, а не только возвращению детей.

Ответ 1

Обновление 2015-05-15

Лучший ответ, непосредственно ссылающийся на родительские коммиты ветки:

$ git rev-list -1 --format=%p <branch_name> | grep -v commit |
  xargs -I {} sh -c 'git rev-list -1 --format="%h %ct" {}' | grep -v commit

и вы все равно можете связать все ветки, объединенные с master, в нем:

$ git branch -a --merged master | grep -v master | 
  xargs -I {} sh -c 'git rev-list -1 --format=%p {}' | grep -v commit |
  xargs -I {} sh -c 'git rev-list -1 --format="%h %ct" {}' | grep -v commit

Это может работать даже для ветвей, которые стали частью вашего дерева из быстрой перемотки вперед.

Если есть аргумент, вы можете перейти к rev-list, который мешает вам иметь grep -v commit каждый раз, мне было бы интересно узнать его.

Примечание. Вместо grep -v master я ищу имена ветвей, которые соответствуют issue. Если вы хотите включить или исключить определенные ветки, вы должны сделать то же самое.


Оригинальные

Чтобы получить хеш, вы можете сделать следующее:

$ git log --ancestry-path --merges --format=%H <branch_name>..master | tail -1

или вы можете заменить формат в любом формате, который вы искали. --merges просто уменьшает количество строк, возвращаемых до того, как мы выберем последний.

Вы можете связать список объединенных ветвей с помощью:

$ git branch -a --merged master | grep -v master |
  xargs -I {} sh -c 'git log --ancestry-path --format=%H --merges {}..master | tail -1'

но я не сделал фактической обрезки. =)