threads / discuss / 474

Howto update a 'dirty' entry in the cache from the object database

Subject: Howto update a 'dirty' entry in the cache from the object database

## tl;dr

4 messages between May 4, 2005 and May 4, 2005.

replies: 3people: 3as markdown or json

Thomas Glanzmann· May 4, 2005, 14:23 UTC · lore

Hello, I edited a bunch of files and notice that I want to revert back one of the files to the original one (the one that comes with HEAD). But I already updated the cache. Is there a way to 'patch' the cache with the original file. Or do I need todo a read-tree into a temporary index file. Check out the one file from this alternate index file and use update-cache to update my original index file?

	Thomas [ who want's a "git revert" ]
Linus Torvalds· May 4, 2005, 17:23 UTC · re: Thomas Glanzmann · lore

Re: Howto update a 'dirty' entry in the cache from the object database

On Wed, 4 May 2005, Thomas Glanzmann wrote:
Show 5 quoted lines
>
> I edited a bunch of files and notice that I want to revert back one of
> the files to the original one (the one that comes with HEAD). But I
> already updated the cache. Is there a way to 'patch' the cache with the
> original file.
Absolutely.
You can do it several ways. The easiest one is
	git-read-tree -m HEAD
	git-checkout-cache -f filename

but this means that you revert your entire index file to the old HEAD information, so you'll need to do git-update-cache on the files that you changed.

So:
> Or do I need todo a read-tree into a temporary index
> file. Check out the one file from this alternate index file and use
> update-cache to update my original index file?

Yes. If you want to touch just that one file, and you actually _want_ to save all the other index information updates except for this one file. If so, you can do

	# read a new index file with the HEAD information
	GIT_INDEX_FILE=tmp-index git-read-tree HEAD
	# check out just the one file you want to have
	GIT_INDEX_FILE=tmp-index git-checkout-cache -f filename
	# remove the now useless temporary index
	rm tmp-index
	# update your _real_ index file with the file information
	git-update-cache filename

and you're done - you've now updated only that _one_ file in your working area, and you've re-set the index file for that entry.

And yes, scripting it so that you don't make stupid mistakes is probably a good idea. For exmple, if you misspell GIT_INDEX_FILE (like I did when I write that at first), you'd have reverted your real index file after all.

In other words, the git core certainly is very flexible and can easily do what you want, but it's also certainly very very easy to screw up with.

		Linus
Junio C Hamano· May 4, 2005, 17:37 UTC · re: Linus Torvalds · lore

Re: Howto update a 'dirty' entry in the cache from the object database

>>>>> "LT" == Linus Torvalds <torvalds@osdl.org> writes:
LT> On Wed, 4 May 2005, Thomas Glanzmann wrote:
Show 5 quoted lines
>> 
>> I edited a bunch of files and notice that I want to revert back one of
>> the files to the original one (the one that comes with HEAD). But I
>> already updated the cache. Is there a way to 'patch' the cache with the
>> original file.
LT> Absolutely.
LT> You can do it several ways. The easiest one is

LT> git-read-tree -m HEAD LT> git-checkout-cache -f filename

LT> but this means that you revert your entire index file to the old HEAD LT> information, so you'll need to do git-update-cache on the files that you LT> changed.

I think the easiest one that does not lose the cache for other files is:

    git-diff-cache -z HEAD |
    GIT_EXTERNAL_DIFF=git-apply-patch-script \
        git-diff-tree-helper -z -R filename

This means: find diff from HEAD to the cache, and apply the diff in the reverse, only to the filename.

Thomas Glanzmann· May 4, 2005, 19:20 UTC · re: Linus Torvalds · lore

Re: Howto update a 'dirty' entry in the cache from the object database

Hello,
> 	# read a new index file with the HEAD information
> 	GIT_INDEX_FILE=tmp-index git-read-tree HEAD
> 	# check out just the one file you want to have
> 	GIT_INDEX_FILE=tmp-index git-checkout-cache -f filename
> 	# remove the now useless temporary index
> 	rm tmp-index
> 	# update your _real_ index file with the file information
> 	git-update-cache filename
thanks. That is exactly what I was looking for.
	Thomas

← back to recent threads