To update and refresh only the files already checked out:
$ git checkout-index -n -f -a && git update-index --ignore-missing --refresh
On an inefficient filesystem with core.ignorestat
set
$ git update-index --really-refresh (1)
$ git update-index --no-assume-unchanged foo.c (2)
$ git diff --name-only (3)
$ edit foo.c
$ git diff --name-only (4)
M foo.c
$ git update-index foo.c (5)
$ git diff --name-only (6)
$ edit foo.c
$ git diff --name-only (7)
$ git update-index --no-assume-unchanged foo.c (8)
$ git diff --name-only (9)
M foo.c
1.
forces lstat(2) to set "assume unchanged" bits for paths
that match index.
2.
mark the path to be edited.
3.
this does lstat(2) and finds index matches the path.
4.
this does lstat(2) and finds index does not
match the
path.
5.
registering the new version to index sets "assume
unchanged" bit.
6.
and it is assumed unchanged.
7.
even after you edit it.
8.
you can tell about the change after the fact.
9.
now it checks with lstat(2) and finds it has been changed.