Re: [PATCH v2] checkout.c: unstage empty deleted ita files
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Aug 1, 2019, 17:34 UTC
- Message-ID
- <xmqq4l30okmi.fsf@gitster-ct.c.googlers.com>
- In-Reply-To
- <20190801160756.12601-1-vcnaik94@gmail.com>
Varun Naik <vcnaik94@gmail.com> 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
Show 9 quoted lines
> `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.