git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[bug] git stash push {dir-pathspec} wipes untracked files

From
JSJake Stine <jake.stine@gmail.com>
Date
Mar 15, 2018, 16:40 UTC
Message-ID
<CABWk7R9xNDHJbbsMZbOyhcYXq-bD6Krvbw_mKDBJFALALS3AHA@mail.gmail.com>

Hi, I ran into what I believe is a bug today. I’m using primarily Git for Windows 2.16.2 and also reproduced the behavior on Git for Windows 2.15.1 and Git 2.14.1 on Ubuntu:

Given any repository with at least one subdirectory:
1.       Create some untracked files in the subdir
2.       Modify a tracked file in the subdir
3.       Execute `git stash push subdir`
4.       The untracked files will be removed, without warning.

`git stash push` behaves as-expcted and does not touch untracked files. It’s only when a directory tree is specified as [pathspec] that the problem occurs.

Here's the precise reproduction case executed on a linux box:
jake@jake-VirtualBox:~/woot$ git --version
git version 2.14.1
jake@jake-VirtualBox:~/woot$ git config --global user.email jake.stine@gmail.com
jake@jake-VirtualBox:~/woot$ git config --global user.name "Jake Stine"
jake@jake-VirtualBox:~$ git init woot
Initialized empty Git repository in /home/jake/woot/.git/
jake@jake-VirtualBox:~$ cd woot
jake@jake-VirtualBox:~/woot$ mkdir subdir
jake@jake-VirtualBox:~/woot$ echo "test" > meh.txt
jake@jake-VirtualBox:~/woot$ echo "test" > subdir/meh2.txt
jake@jake-VirtualBox:~/woot$ git add meh.txt subdir/meh2.txt
jake@jake-VirtualBox:~/woot$ git commit --message="stash bug testing"
jake@jake-VirtualBox:~/woot$ git commit --message="stash bug testing"
[master (root-commit) 2c05580] stash bug testing
 2 files changed, 2 insertions(+)
 create mode 100644 meh.txt
 create mode 100644 subdir/meh2.txt
jake@jake-VirtualBox:~/woot$ echo "test" > subdir/untracked.txt
jake@jake-VirtualBox:~/woot$ echo "append" >> subdir/meh2.txt
jake@jake-VirtualBox:~/woot$ git stash push subdir
Saved working directory and index state WIP on master: 2c05580 stash bug testing
jake@jake-VirtualBox:~/woot$ ls subdir
meh2.txt

The expected result is that when I do `ls subdir` the file "untracked.txt" still exists. Alternatively, git stash should warn me before destroying my untracked files, and require I specify --force or similar to invoke destructive behavior.

Thanks! Jake Stine

Next: Junio C Hamano
Message 1 of 4 in “[bug] git stash push {dir-pathspec} wipes untracked files”
  1. Jake StineMar 15, 2018
  2. Junio C HamanoMar 15, 2018
  3. Randall S. BeckerMar 15, 2018
  4. Igor DjordjevicMar 15, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.