Re: (beginner) git rm

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[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

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux