Git show файлы, которые были изменены за последние 2 дня - PullRequest
58 голосов
/ 21 сентября 2011

Как мне получить список всех файлов, которые были изменены за последние 2 дня?Я знаю о

git log --name-status --since="2 days ago" 

, но это покажет мне идентификаторы, даты и сообщения коммитов.Все, что мне нужно, это список имен файлов, которые были изменены.

Возможно ли это с помощью git?

Ответы [ 5 ]

84 голосов
/ 21 сентября 2011
git log --pretty=format: --name-only --since="2 days ago"

если некоторые файлы дублируются в нескольких коммитах, вы можете использовать pipe для фильтрации

git log --pretty=format: --name-only --since="2 days ago" | sort | uniq
50 голосов
/ 24 ноября 2013
git diff --stat @{2.days.ago} # Deprecated!, see below

Коротко и эффективно

Редактировать

TLDR: использовать git diff $(git log -1 --before=@{2.days.ago} --format=%H) --stat

Длинное объяснение: оригинальное решение было хорошим, но с небольшим затруднением,он был ограничен reflog, другими словами, показывает только локальную историю, потому что reflog никогда не отправляется на remote .Это причина, по которой вы получаете клонированный warning: Log for 'master' only goes back to... в репозиториях.

Я настроил псевдоним на моей машине:

alias glasthour='git diff $(git log -1 --before=@{last.hour} --format=%H) --stat' 
alias glastblock='git diff $(git log -1 --before=@{4.hours.ago} --format=%H) --stat' 
alias glastday='git diff $(git log -1 --before=@{last.day} --format=%H) --stat' 
alias glastweek='git diff $(git log -1 --before=@{last.week} --format=%H) --shortstat | uniq' 
alias glastmonth='git diff $(git log -1 --before=@{last.month} --format=%H) --shortstat | uniq'                                                                                                                

кредиты: ответ ниже@ adam-dymitruk

3 голосов
/ 21 сентября 2011

Вы можете выполнить сравнение версии, ближайшей к 2 дням ранее, с помощью:

git diff $(git log -1 --before="2 days ago" --format=%H).. --stat

--stat дает вам сводку изменений. Добавьте --name-only, чтобы исключить любую мета-информацию и иметь только список имен файлов.

Надеюсь, это поможет.

3 голосов
/ 21 сентября 2011

Используйте параметр --raw для git log:

$ git log --raw --since=2.days

См. Раздел --diff-filter страницы справки git log для объяснения флагов, показанных в формате --raw. Они объясняют, что происходит с файлами в каждом коммите:

   --diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]
       Select only files that are Added (A), Copied (C), Deleted (D),
       Modified (M), Renamed (R), have their type (i.e. regular file,
       symlink, submodule, ...) changed (T), are Unmerged (U), are Unknown
       (X), or have had their pairing Broken (B). Any combination of the
       filter characters (including none) can be used. When *
       (All-or-none) is added to the combination, all paths are selected
       if there is any file that matches other criteria in the comparison;
       if there is no file that matches other criteria, nothing is
       selected. 
2 голосов
/ 21 сентября 2011
git log --pretty="format:" --since="2 days ago" --name-only
...