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

Видимо это:

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

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

5 ответов

Решение

Вы не можете - по крайней мере, не только в 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, Но это больно в лучшем случае. Посмотрите ответ Тима Байгелейзена, используя 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 '$0 >= "2013-01-01" && $0 <= "2013-12-01"'

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

Для тех, кто ищет быстрое решение для копирования и вставки:

      git log --pretty=format:'%ai %H' | \
    awk '$0 >= "<after-date>" && $0 <= "<before-date>" && !a[$3]++' | \
    cut -d' ' -f 4 | git log --no-walk --stdin

Обратите внимание, что <after-date> или <before-date> порции можно останавливать по мере необходимости, и && !a[$3]++ требуется только при использовании git log пометить как -g который может повторять коммиты.

На основании этого ответа по torek , который также способствовали в Mr_and_Mrs_D и Tim Biegeleisen (все участник по этому вопросу).

Вдохновленный ответом Тима Бигелейзена выше.

git log --all --date=iso --pretty=format:'%ad%x08%aN %s' | grep 2020-06-09 | sort -u

сделал то, что мне нужно. Мне нужна дата автора, а не дата коммитов, потому что я много перебазирую и раздавливаю. но я сохраняю важные даты при импорте.

В связи с этим у меня есть небольшой помощник, позволяющий мне сбросить адрес электронной почты автора, но сохранить дату исходного автора. --reset-author по умолчанию перезаписывает дату автора.

https://github.com/mathieujobin/git-scripts/blob/master/bin/git-reset-author-but-not-date

в журнале git выше, при необходимости, вы можете добавить %H получить гитшу

Другие вопросы по тегам