По-видимому, это:
git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"
фильтрует фиксации на основе даты фиксации. Как я могу показать коммиты для указанного диапазона дат автора?
По-видимому, это:
git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"
фильтрует фиксации на основе даты фиксации. Как я могу показать коммиты для указанного диапазона дат автора?
Вы не можете — по крайней мере, не только в 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"
См. также здесь
%ad
покажет вам этот коммит, созданный в 1999 году, хотя он был создан задолго до 2016 года!
- person torek; 09.10.2017
Вы можете.
Но, как упомянул @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
указывает имя автора.
log -p
, например, так не пойдет.
- person Sergei Tachenov; 10.07.2021
вдохновленный ответом Тима Бигелейзена выше.
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
, чтобы получить gitsha
git log --all --date=iso --pretty=format:'%ad - %aN : %s' | grep 2020-09 | sort -u
- person sicko; 02.10.2020