On Fri, May 1, 2020 at 11:33 AM Junio C Hamano <gitster@xxxxxxxxx> wrote: > Eric Sunshine <sunshine@xxxxxxxxxxxxxx> 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. > > +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.