Hi I came across a description of a new git command currently in development called 'git restore'. Since it's still not out, and the original poster [1] seemed to ask for feedback, I though I'd send some here. Hope that's ok! Reading the documentation [2] I find it very confusing. In particular when comparing the following two commands: $ git restore --staged file $ git restore --worktree file With the current proposal, the first will restore the index from HEAD, while the second will restore the worktree from the index. In other words, the source for the restore is different in both commands, even though neither specify a source! This means that git-restore really does two different things depending on some other not obvious context. Unfortunately that's typical of the (often criticized) obscure interface of git. To be fair that behavior is documented in [2]. But still, having a variable default value for --source depending on other arguments is very confusing. So in summary, I'd make two recommendations for this command's UX: 1. Make --source default value always HEAD if unspecified 2. Rename --staged to --index Some examples of those: $ git restore --index file # reset the index from HEAD $ git restore --worktree file # reset the worktree from HEAD $ git restore --worktree --source=index file # reset the worktree from the index $ git restore --index --worktree file # reset both the index and worktree from HEAD $ git restore file # reset the worktree from HEAD [1] https://news.ycombinator.com/item?id=19907960 [2] https://github.com/git/git/blob/pu/Documentation/git-restore.txt Best, Victor