threads / bug / 53340

Bug: git restore --staged --worktree not working in git version 2.26.2.windows.1

Subject: Bug: git restore --staged --worktree not working in git version 2.26.2.windows.1

## tl;dr

2 messages between Apr 28, 2020 and May 1, 2020.

replies: 1people: 2as markdown or json

Harri Mehtälä· Apr 28, 2020, 09:01 UTC · lore
Hello
In git version 2.26.2.windows.1
I am trying to do git restore --staged --worktree for a file. I understood from the documentation that you can do both.
"Specify the restore location. If neither option is specified, by default the working tree is restored. Specifying --staged will only restore the index. Specifying both restores both."

______________________ $ git status On branch ... Your branch is up to date with ...

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   pom.xml
$ git restore --staged --worktree pom.xml

$ git status On branch ... Your branch is up to date with ...

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   pom.xml
______________________
It looks like currently I have to do both separately. 
- Harri Mehtälä
Eric Sunshine· May 1, 2020, 08:42 UTC · re: Harri Mehtälä · lore

Re: Bug: git restore --staged --worktree not working in git version 2.26.2.windows.1

On Tue, Apr 28, 2020 at 5:16 AM Harri Mehtälä <harri.mehtala@finago.com> wrote:
Show 13 quoted lines
> I am trying to do git restore --staged --worktree for a file. I
> understood from the documentation that you can do both.
>
> "Specify the restore location. If neither option is specified, by
> default the working tree is restored. Specifying --staged will only
> restore the index. Specifying both restores both."
>
> $ git restore --staged --worktree pom.xml
> $ git status
> Changes to be committed:
>     modified:  pom.xml
>
> It looks like currently I have to do both separately.

If you read a bit further in the documentation, it says that you must specify --source when combining --staged and --worktree, so your "git restore" invocation is incorrect. Unfortunately, "git restore" is a bit buggy in this regard since it blindly accepts this invalid combination of options when it should instead error out. I submitted a patch series[1] which fixes this shortcoming.

Having to specify --source in this case can be cumbersome if you just want to restore from HEAD (a reasonable default), so the submitted patch series[1] also makes --source default to HEAD when --staged and --worktree are combined.

[1]: https://lore.kernel.org/git/20200501082746.23943-1-sunshine@sunshineco.com/T/

← back to recent threads