Varun Naik <[email protected]> writes:
> It is possible to delete a committed file from the index and then add it
> as intent-to-add. After `git checkout HEAD`, the file should be
> identical in the index and HEAD.
We should write this as `git checkout HEAD <pathspec>`; with the
command without the <pathspec> form, the files changed in various
ways should not be changed with it at all.
$ echo modified >>file1
$ rm file2
$ git rm --cached file3 && git add -N file3
$ git checkout HEAD
M file1
D file2
M file3
> `git checkout HEAD` calls tree.c:read_tree_1(), with fn pointing to
> checkout.c:update_some(). update_some() creates a new cache entry but
> discards it when its mode and oid match those of the old entry. A cache
> entry for an ita file and a cache entry for an empty file have the same
> oid. Therefore, an empty deleted ita file previously passed both of
> these checks, and the new entry was discarded, so the file remained
> unchanged in the index. After this fix, if the file is marked as ita in
> the cache, then we avoid discarding the new entry and add the new entry
> to the cache instead.
Thanks; the flow of thought above is quite straight-forward to
follow.