Мабуть, це :
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
: use what specifier робить коміти потенційно цікавими, за винятком фільтрів дати: у цьому випадку це просто --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 року!
Ви можете .
Але, як згадував @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 --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