81

How can I have a list with all the files that were changed in the last 2 days? I know about

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

but this will show me ids, dates and commit messages. All I need is the list of the file names which were changed.

Is that possible with git?

Gary Barrett
  • 1,764
  • 5
  • 21
  • 33
dole doug
  • 34,070
  • 20
  • 68
  • 87

5 Answers5

116
git log --pretty=format: --name-only --since="2 days ago"

if some files duplicate in multiple commits, you can use pipe to filter it

git log --pretty=format: --name-only --since="2 days ago" | sort | uniq
Peng Qi
  • 1,412
  • 1
  • 10
  • 13
59
git diff --stat @{2.days.ago} # Deprecated!, see below

Short and effective

Edit

TLDR: use git diff $(git log -1 --before=@{2.days.ago} --format=%H) --stat

Long explanation: The original solution was good, but it had a little glitch, it was limited to the reflog, in other words, only shows the local history, because reflog is never pushed to remote. This is the reason why you get the warning: Log for 'master' only goes back to... in repos recently cloned.

I have configured this alias in my machine:

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'                                                                                                                

credits: answer below by @adam-dymitruk

Community
  • 1
  • 1
AA.
  • 4,496
  • 31
  • 35
  • 1
    This is really great. Not sure why pretty-format got more votes. – sevenfourk Jun 12 '14 at 07:56
  • 1
    @sevenfourk At least for me, working on a big project on a slow server, this solution is a lot slower than the pretty-format one. Also, doing that you get additional information, that may generate an extra job if you're parsing the output of this with any script. So, I upvoted the other one. – Nazareno Lorenzo Feb 05 '15 at 09:09
  • 2
    I had to change it to ` git diff --stat "@{2 days ago}"` to get it to work. (Maybe because I'm on Windows) – Annabel Oct 18 '15 at 00:51
  • This does not work on Cocoapods/Specs because "warning: Log for 'master' only goes back to [Yesterday]" – William Entriken Jun 29 '16 at 03:22
  • Long paths are cut short and prefixed with `.../`, potentially ruining the ouptut. – galmok Dec 04 '17 at 08:27
  • Is there a reason to use`-1 --before` instead of `--after`? – ConorSheehan1 Mar 04 '19 at 17:37
3
git log --pretty="format:" --since="2 days ago" --name-only
Stacey Richards
  • 6,536
  • 7
  • 38
  • 40
3

Use the --raw option to git log:

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

See the --diff-filter part of the git log help page for the explanation of the flags shown in the --raw format. They explain what happen to the files in each commit:

   --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. 
holygeek
  • 15,653
  • 1
  • 40
  • 50
3

You can do a diff of a version that's closest to 2 days ago with:

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

--stat gives you a summary of changes. Add --name-only to exclude any meta information and have only a file name listing.

Hope this helps.

Adam Dymitruk
  • 124,556
  • 26
  • 146
  • 141