Как заставить git показывать коммиты в указанном диапазоне дат для даты автора?

видимо этой:

git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"

фильтры фиксируют на основе дата коммиттер. Как я могу показать коммиты для указанного диапазона дат автора ?

3 ответов


вы не можете-по крайней мере, не только в Git. (Напоминание другим, посещающим этот вопрос: это не о просмотр дата автора, речь идет о опции совершает автор дата, а-ля --since/--after и --until/--before. Эти селекторы используют коммиттер дата, а не дата автор. Рассмотрим в качестве крайнего примера фиксацию, сделанную "сейчас", так что ее дата фиксатора находится в 2000-х годах, но задним числом в поле " автор-дата 1999 год. Если ваш диапазон выбора- "в любое время на рубеже веков", вы отмените выбор этого коммита, так как его дата фиксации-" сейчас", более десяти лет после 1999 года.)

я считаю это небольшой ошибкой в Git: вы должны иметь возможность запросить, чтобы он использовал поле даты автора в любом месте, где вы можете запросить, чтобы он использовал поле даты фиксатора. Это легко с форматирование журнала, так как у нас %ad и %cd и тому подобное, но с невозможно совершить выбор. Самое близкое, что у нас есть, это git rev-list смогите сортировать автор-датой (внутри общий топо-сортировать).

глобальный переключатель в git rev-list, как --use-author-date, будет работать как простой патч, и не будет слишком трудно добавить в Git, но я думаю, что было бы лучше иметь --min-author-age и --max-author-age или аналогичный, и флаг" Сортировать по дате автора " (независимо от общего --topo-order флаг, так что параметр и флаги имеют тот же эффект, что и --author-date-order).

в качестве обходного пути, вы можете перечислить все потенциально интересные коммиты (с git rev-list или эквивалент, например git log: используйте любой спецификатор, который делает коммиты потенциально интересными, за исключением фильтров даты: в этом случае это просто --all) и извлечь все их поля даты автора (с git log --format=%at или что-то еще), затем сделайте свою собственную обрезку списка идентификаторов фиксации, а затем повторно отправьте оставшиеся идентификаторы фиксации в git log --no-walk. Но это в лучшем случае болезненно. См.Тим Ответ Beigeleisen с использованием awk дополнительные.


может быть, я что-то упускаю, но разве этого не достаточно?

git log --pretty=format:"%ad - %an: %s" --after="2016-01-31" --until="2017-03-10" --author="John Doe"

см. также здесь


вы можете.

но, как упоминал @torek, вы, возможно, не сможете сделать это с чистым Git. Одним из вариантов было бы передать некоторый довольно формат вывода из git log на awk, и проверьте дату автора там:

git log --date=iso --pretty=format:'%ad%x08%aN' | awk ' >= "2013-01-01" &&  <= "2013-12-01"'

здесь %ad дает автору дату в формате ISO, и %aN дает имя автора.