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

я уже просмотрел соответствующие документы из git-scm.com и gitref.org, но я, кажется, не могу понять этого.

допустим, я хочу получить все коммиты за вторник, 12 ноября 2013 года. Используя существующий РЕПО в качестве примера, я точно знаю, что у меня есть коммиты в этот день, а также коммиты накануне и послезавтра.

С 2013-11-11 и 2013-11-12

все следующее дает мне коммиты для 11 и 12 ноября:

  • git log --after="2013-11-11" --until="2013-11-12"
  • git log --since="2013-11-11" --until="2013-11-12"
  • git log --after="2013-11-11" --before="2013-11-12"
  • git log --since="2013-11-11" --before="2013-11-12"

С 2013-11-12 только

все следующее не дает мне никаких коммитов:

  • git log --since="2013-11-12" --until="2013-11-12"
  • git log --since="2013-11-12" --before="2013-11-12"
  • git log --after="2013-11-12" --until="2013-11-12"
  • git log --after="2013-11-12" --before="2013-11-12"

С 2013-11-12 и 2013-11-13

как и ожидалось (по результатам 2013-11-11 и 2013-11-12 выше), все следующие дают мне результаты как от 12-го, так и от 13-го ноября:

  • git log --since="2013-11-12" --before="2013-11-13"
  • git log --after="2013-11-12" --before="2013-11-13"
  • git log --since="2013-11-12" --until="2013-11-13"
  • git log --after="2013-11-12" --before="2013-11-13"

...и так далее и тому подобное. Я чувствую, что я пробовал все возможные комбинации since, after, before и until но все еще не могу найти ответ, и я не понимаю, являются ли эти варианты включительными или исключительными, поскольку они кажутся включительно, если две даты разные, но исключительные, если они в один и тот же день. Я что-то пропустил / что я делаю неправильно?!

4 ответов


Спасибо Джон Бартоломью!

ответ заключается в том, чтобы указать время, например git log --after="2013-11-12 00:00" --before="2013-11-12 23:59"


Я обычно проверяю свой журнал git и вижу, что я работал в определенный день и обновляю свой график на основе этого, но это боль в заднице, чтобы ввести полную дату в формате ISO, поэтому я просто делаю это так

git log --after=jun9 --before=jun10

и я добавить --author печатать только мои коммиты

git log --since=jun9 --until=jun10 --author=Robert 

это печатает коммиты, которые произошли в последний 9 июня (так для 2016 в этом случае, а не для 2015 или 2014 и так далее).

на --since/--after и --until/--before параметры также могут возьмите такие вещи, как 3 days ago, yesterday, etc.


ничего плохого в принятом ответе(который я поддержал), но... мы здесь ради науки!

выход ниже можно расширить / подгонять с pretty=format:<string> заполнители:

git log --pretty='format:%H %an %ae %ai' | grep 2013-11-12

не 100% невосприимчив к ошибкам, поскольку одна и та же строка могла быть введена пользователем. но приемлемо в зависимости от того, какие заполнители используются. Например, приведенный выше фрагмент не потерпит неудачу.

можно было бы просто разобрать все git log к JSON и потреблять / манипулировать своими данными к своему сердцу. Проверить https://github.com/dreamyguy/gitlogg out и никогда не оглядываться назад!

отказ от ответственности: это один из моих проектов.


Я создал псевдоним для этой конкретной цели:

commitsAtDate = "!f() { git log --pretty='format:%C(yellow)%h %G? %ad%Cred%d %Creset%s%C(cyan) [%cn]' --decorate --after=\" 0:00\" --before=\" 23:59\" --author \"`git config user.name`\"; }; f"

использование:

git commitsAtDate 2017-08-18