Varun Naik <vcnaik94@xxxxxxxxx> 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.