git stash --include-untracked possible destructive behavior

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



One of our users has just discovered a destructive behavior of git stash --include-untracked: ignored files within non-ignored directories will not be stashed as untracked files (expected), but will still be removed from the working tree. The problem is reproducible by following command sequence:

  $ git init
  $ echo "1" > file.txt
  $ mkdir Data
  $ echo "1" > Data/ignored.txt
  $ echo "Data/*" > .gitignore
  $ git add .
  $ git commit -m "initial import"
  $ echo "2" > file.txt
  $ git stash save --include-untracked
  Saved working directory and index state WIP on master: 6ce5303 initial
  import

  $ git stash show stash@{1}
   file.txt | 2 +-
   1 file changed, 1 insertion(+), 1 deletion(-)

  $ ls Data
  ls: cannot access 'Data': No such file or directory

As you can see, after saving the stash, stash@{1} doesn't contain Data/ignored.txt, but the entire Data directory is still gone from the working tree. As a consequence, applying the stash won't bring back Data/ignored.txt, too.

  $ git stash apply
  On branch master
  Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
    (use "git checkout -- <file>..." to discard changes in working
    directory)

          modified:   file.txt

  no changes added to commit (use "git add" and/or "git commit -a")

  $ ls Data
  ls: cannot access 'Data': No such file or directory

Note that when changing .gitignore to "Data/" instead of "Data/*", --include-untracked works as expected.

Tested with: git version 2.13.0.windows.1

-Marc



[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux