Re: Can I checkout a single file without altering index?
- From
Jeff King <peff@peff.net>
- Date
- Oct 15, 2010, 19:48 UTC
- Message-ID
- <20101015194851.GA31131@sigill.intra.peff.net>
- In-Reply-To
- <20101015193252.GA23082@burratino>
On Fri, Oct 15, 2010 at 02:32:52PM -0500, Jonathan Nieder wrote:
Show 21 quoted lines
> > git commit -o|--only, which is the same as "git commit <paths>". Of > > course it still uses an index, to create the tree, but it uses a > > temporary one based on HEAD instead of the current index contents. > > Ah, it's stranger than that. > > * A partial commit. > * > * (0) find the set of affected paths; > * (1) get lock on the real index file; > * (2) update the_index with the given paths; > * (3) write the_index out to the real index (still locked); > * (4) get lock on the false index file; > * (5) reset the_index from HEAD; > * (6) update the_index the same way as (2); > * (7) write the_index out to the false index file; > * (8) return the name of the false index file (still locked); > > The net effect being that the index will match the work tree for the > listed paths when the operation is over, while other files are > untouched.
Well, yeah, it does have to update those files in the regular index. Any other semantics would be insane; the change would appear reverted looking at the difference between HEAD and the index.
With respect to your proposed change:
Show 15 quoted lines
> diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt > index 42fb1f5..6bb3eff 100644 > --- a/Documentation/git-commit.txt > +++ b/Documentation/git-commit.txt > @@ -191,9 +191,10 @@ FROM UPSTREAM REBASE" section in linkgit:git-rebase[1].) > --only:: > Make a commit only from the paths specified on the > command line, disregarding any contents that have been > - staged so far. This is the default mode of operation of > - 'git commit' if any paths are given on the command line, > - in which case this option can be omitted. > + staged so far. The state of other files in the index is > + preserved and will not affect the commit. This is the > + default mode of operation of 'git commit' if any paths are given > + on the command line, in which case this option can be omitted.
I always assumed that "disregarding any contents that have been staged" meant "we will leave unmentioned paths alone". But I don't think it hurts to be explicit. So your change looks fine to me.
-Peff