Web lists-archives.com

Re: [PATCH] Documentation/git-checkout: make doc. of checkout <tree-ish> clearer

From: "Christoph Michelbach" <michelbach94@xxxxxxxxx>
On Sun, 2017-04-16 at 00:28 +0100, Philip Oakley wrote:
From: "Christoph Michelbach" <michelbach94@xxxxxxxxx>
> While technically in the documentation, the fact that changes
> introduced by a checkout <tree-ish> are staged automatically, was
> not obvious when reading its documentation. It is now specifically
> pointed out.
> Signed-off-by: Christoph Michelbach <michelbach94@xxxxxxxxx>
> ---
> Documentation/git-checkout.txt | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
> diff --git a/Documentation/git-checkout.txt
> b/Documentation/git-checkout.txt
> index 8e2c066..cfd7b18 100644
> --- a/Documentation/git-checkout.txt
> +++ b/Documentation/git-checkout.txt
> @@ -85,9 +85,10 @@ Omitting <branch> detaches HEAD at the tip of the
> current branch.
> from the index file or from a named <tree-ish> (most often a
> commit). In this case, the `-b` and `--track` options are
> meaningless and giving either of them results in an error. The
> - <tree-ish> argument can be used to specify a specific tree-ish
> - (i.e. commit, tag or tree) to update the index for the given
Do these lines above actually need reflowing? Their content hasn't
making it more difficult to spot the significant changes below here.

They're just part of the context of the automatically created patch.

The lines with +/- markings are the actual change lines. It's the lines
without them that are the context lines.

It does sound like an accidental reflow where the "(i.e." moved between
lines, and the "paths" moved for the following lines.

If reflowing is required it's normal to put it in a separate patch so that each type of change gets its own commit message.

> + Note that this means
> + that the changes this command introduces are staged automatically.
Does this actually capture the intent of the user confusion it's meant to
cover? I may have missed the original discussions.

There is no original discussion in this mailing list. I got surprised the
automatically modified my staging area even though I didn't remember to
have read it in
the corresponding man page. Upon reading the relevant part of the man page
again, I
noticed that it in fact can be inferred from the half sentence "to update
the index for
the given paths before updating the working tree." but it isn't pointed
out explicitly.
Doing so doesn't take a lot more text and can avoid such surprises. So
yes, if it's
pointed out explicitly, the confusion is removed.

For a clean commit checkout my mental model is not one of anything new
actively staged i.e. different from what was in the commit.

Note that this is not about something like `git checkout 925b29` but about
something like
`git checkout 925b29 src`.

Yes, that was the part I was getting at.

The commit message (and the patch context) doesn't quite give enough to see that is is particular to the -

git checkout [-p|--patch] [<tree-ish>] [--] [<paths>…​]invocation.

I can see that
if a particular tree is checkout then it's implicit staging could well be a

And it is actually documented. Just not explicitly mentioned / pointed out.

It maybe worth thinking a bit more about how such a mental model may happen.

To those in the know it sounds obvious that the path content replaces the old path. It's that this implies a *change* within the commit that may not be.

Explaining that it at the heart of the documentation change.

> --