Hi Duy, On Mon, Feb 18, 2019 at 8:21 PM Duy Nguyen <pclouds@xxxxxxxxx> wrote: > > On Sat, Feb 2, 2019 at 12:57 AM Junio C Hamano <gitster@xxxxxxxxx> wrote: > > > > Duy Nguyen <pclouds@xxxxxxxxx> writes: > > > > > Of course we could just do --index and --worktree, each option > > > restores the respective part. Then it's combinable (and extensible in > > > the future). But then "git restore" means "git restore --index > > > --worktree" and typing "git restore --index" effectively removes the > > > default "--worktree", which seems a bit twisted. > > > > Or "git restore --no-worktree" (essentially, instead of saying > > "keep", say "no" to mean "negation"). > > > > Incidentally, "git restore --no-index" does not have a counterpart > > in "git checkout", but I think it is probably a good thing to add; > > as it has to do far more than "git cat-file blob $tree:$path >$path" > > these days. > > OK this hopefully will be the final design > > (git restore) "[--worktree] <paths>" restores worktree paths from index > > "--index <paths>" restores the index from HEAD (aka "git reset") > > "--source <tree> (--index|--worktree) <paths>" restores index or > worktree (or both) from <tree> > > I'm a bit reluctant to support "git restore --index --worktree > <paths>" without --source, which should default to HEAD, since it's a > bit unclear/inconsistent ("git restore --worktree <paths>" defaults to > index as the source, but here we use a different default source). Sorry for going missing a while from the conversation, and thanks so much for pushing this forward. Overall this looks good, but there's just one part that confuses me. Here you seem to suggest that if you pass --source but neither --index or --worktree that both the index and working tree will be written to. Why are "restored" changes considered ready for commit? That seems confusing to me (and was one of the bugs of checkout, IMO). See also second half of https://public-inbox.org/git/xmqq1s6yezk3.fsf@xxxxxxxxxxxxxxxxxxxxxxxxx/ Elijah