Bug: 'git stash --staged' crashes with binary files
- From
Adam Johnson <me@adamj.eu>
- Date
- Jun 1, 2023, 21:26 UTC
- Message-ID
- <CAMyDDM3DFyru6zph4qqf_QoaOeezvYkT7SmwinCfJNnFsnuRjQ@mail.gmail.com>
Stage a binary file and run 'git stash --staged'. The stash is created but the command fails to remove changes from the index:
$ echo -n "\0" >file
$ git add file
$ git stash --staged Saved working directory and index state WIP on main: e7911b6 Whatever error: cannot apply binary patch to 'file' without full index line error: file: patch does not apply Cannot remove worktree changes
$ git status
...
Changes to be committed:
new file: fileThe "remove from the index" step seems not to be binary-compatible.
The below patch adds a reproducing test.
diff --git t/t3903-stash.sh t/t3903-stash.sh index 376cc8f4ab..5e3ea64f38 100755 --- t/t3903-stash.sh +++ t/t3903-stash.sh @@ -392,6 +392,13 @@ setup_stash() git stash pop && test bar,bar4 = $(cat file),$(cat file2) ' +test_expect_success 'stash --staged with binary file' ' + echo -n "\0" >file && + git add file && + git stash --staged && + git stash pop && + test "\0" = $(cat file) +' test_expect_success 'dont assume push with non-option args' ' test_must_fail git stash -q drop 2>err &&