git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/2] restore: default to HEAD when combining --worktree and --staged

From
Eric Sunshine <sunshine@sunshineco.com>
Date
May 5, 2020, 03:53 UTC
Message-ID
<CAPig+cT62cEx9Zk+DN02xGfAmqZD258Toa3PArSxEf8QDFeDww@mail.gmail.com>
In-Reply-To
<xmqqimhfoelf.fsf@gitster.c.googlers.com>
On Fri, May 1, 2020 at 11:33 AM Junio C Hamano <gitster@pobox.com> wrote:
Show 29 quoted lines
> Eric Sunshine <sunshine@sunshineco.com> writes:
> > [...] This requirement
> > makes it cumbersome to restore a file in both the worktree and the
> > index.
> >
> > However, HEAD is also a reasonably intuitive default restore source when
> > --worktree and --staged are combined. After all, if a user is asking to
> > throw away all local changes to a file (on disk and in the index)
> > without specifying a restore source explicitly -- and the user expects
> > the file to be restored from _somewhere_ -- then it is likely that the
> > user expects them to be restored from HEAD, which is an intuitive and
> > logical place to find a recent unadulterated copy of the file.
>
> I also found that these two paragraphs a bit too long, and by the
> time I finished reading them I forgot that you mentioned that HEAD
> is the default when --staged is given. [...]
>
>   ... This requirement makes it cumbersome to restore a file in
>   both the worktree and the index.
>
>   As we are *not* going to restore the index and the working tree
>   from two different sources, we need to pick a single default
>   when both options are given, and the default used for restoring
>   the index, HEAD, is a reasonable one in this case, too. Another
>   plausible source might be the index, but that does not make any
>   sense to the user who explicitly gave the `--staged` option.
>
>   So, make HEAD the default source when --staged is given, whether
>   --worktree is used at the same time.

Thanks. I was having trouble writing it without being overly subjective (and using words like "intuitive" and "logical"). I'll probably drop the "Another plausible..." bit from the rewrite, though.

Show 13 quoted lines
> > +By default, the restore source for `--worktree` is the index, and the
> > +restore source for `--staged` is `HEAD`. When combining `--worktree` and
> > +`--staged`, the restore source is `HEAD`. `--source` can be used to specify
> > +a different commit as the restore source.
>
> Clear enough, but I wonder if we can simplify it even further.
>
>   By default, if `--staged` is given, the contents are restored
>   from `HEAD`. Otherwise, the contents are restored from the
>   index.
>
> because `--worktree` is the default for the command when neither
> `--staged` or `--worktree` is given.
Makes sense. I wasn't terribly happy with it either.
Previous: Junio C HamanoNext: Taylor Blau
Message 7 of 10 in “enhance "git restore --worktree --staged" behavior”
  1. 0/2 enhance "git restore --worktree --staged" behaviorEric Sunshine, May 1, 2020
  2. 1/2 restore: require --source when combining --worktree and --stagedEric Sunshine, May 1, 2020
  3. Eric SunshineMay 1, 2020
  4. Taylor BlauMay 1, 2020
  5. 2/2 restore: default to HEAD when combining --worktree and --stagedEric Sunshine, May 1, 2020
  6. Junio C HamanoMay 1, 2020
  7. Eric SunshineMay 5, 2020
  8. Taylor BlauMay 1, 2020
  9. Eric SunshineMay 5, 2020
  10. Taylor BlauMay 5, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.