On Wed, Feb 20, 2019 at 2:10 AM Junio C Hamano <gitster@xxxxxxxxx> wrote: > > Junio C Hamano <gitster@xxxxxxxxx> writes: > > > I am getting the impression that to save typing, you would want to > > make "--index --worktree" the default (i.e. among the above, only > > --no-index and --no-worktree need to be spelled explicitly), but > > there is one glitch. Updating from the index must be spelled > > explicitly with "--no-index --worktree". > > And after getting reminded by Elijah, the default pair is > <--no-index, --worktree>. > > > So perhaps the defaulting rule for the "--index" option must become > > a bit more tricky. Perhaps the rules are: > > > > * --worktree is the default; --no-worktree can be given from the > > command line to countermand it, and --worktree can be given from > > the command line to be more explicit. I originally went with that (--no-worktree to negate default settings), but after updating docs to use "git restore" it's just too much to write. My current rules are - default is --worktree - as soon as any of --[no-]worktree or --[no-]index is specified, the above line is void. There is no default, what you specify is what you get. While it's a bit more twisted than spelling out --no-worktree to countermand the default, i think it's more natural to think and write it: ok i'm going to need to restore this and that so I write --this and --that. Going with --no-worktree you need to think "i need to write this and that and counter the default which is that other thing". We essentially have two modes, the default mode and explicit mode. Too bad? > > * when --source <tree> is given from the command line, --index is > > the default, and --no-index can be given to countermand it. > > Correction. > > * when --source <tree> is given, --no-index is the default, but > --index can be given to countermand it. > > > > > * when --source <tree> is not given from the command line, > > --no-index is the only sensible choice. It can be given from the > > command line to be more explicit, but giving --index to > > countermand the --no-index default would be an error, as updating > > the index, whether the same update also goes to the working tree, > > must come from a --source <tree>. > > This is still correct. So I guess I scratch the default source for "--index --no-worktree" (or just --index in my rules above) then? It does make sense to default restoring the index from HEAD. And it makes "git status" suggestion to unstage a bit shorter ("git restore --index <paths>" instead of "git restore --source=HEAD --index <paths>") -- Duy