[Zabre, please keep the Cc: list when replying] On 2009.01.28 13:29:36 -0800, Junio C Hamano wrote: > Zabre <427@xxxxxxx> writes: > > Björn Steinbrink wrote: > >> > >> The "git checkout -- d.txt" is also a valid command, but that restores > >> the file from the index. > >> > >> git checkout -- paths > >> ==> Copy "paths" from the index to the working tree > >> > >> git checkout <tree-ish> -- paths > >> ==> Copy "paths" from the tree-ish to the index and working tree > >> > >> So, for "rm d.txt", a plain "git checkout -- d.txt" would also do the > >> trick, as d.txt is still in the index. But your "git rm d.txt" also > >> removed the file from the index, and thus that checkout does nothing. > >> But "git checkout HEAD -- d.txt" works, as it gets the file from HEAD > >> and puts it into the index and working tree. > > > > This is enlightening, thank you very much! > > (I knew I would love git more and more) > > > > Oh just one (probably stupid) thing : <tree-ish> does represent a directory > > being the root of a tree of folders (which has been added to the index), > > does it? > > Yeah, it typically is a commit object. > > Björn said "Copy", but the operation really is like checking out a book > from a library and "checkout" is a good word for it. "I do not like what > I have in my work tree, and I'd like to replace it with a fresh one taken > out of the index (or, out of that commit)". With "checkout", I'm still a bit unsure about which term to use, because of the behaviour you get with, for example, "git checkout HEAD -- directory". It always just adds or replaces files, but never removes them. So it's not really like taking the old directory out of the repo and using that instead. For example: git rm dir/old_file echo 123 > dir/new_file git add dir/new_file git checkout HEAD -- dir That won't remove dir/new_file from the index (and of course it won't drop it from the working tree). That's the one thing where "git checkout HEAD -- dir" differs from "git reset HEAD -- dir && git checkout -- dir". IIRC we've talked about that on #git a few months ago, but I don't recall what conclusions we came up with. It would probably be better to say that checkout only works with the blobs (because the index doesn't have entries for trees, right?) that exist in the given tree-ish. And thus it doesn't remove entries from the index. But that feels a bit convoluted. :-/ Björn -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html