When running 'git stash push <subdir>' if there are both tracked and
untracked files in this subdirectory, the tracked files are stashed
but the untracked files are discarded.
I can reproduce this on my system (OSX, git 2.14.1) by running the
below script as
bash -x ./stashbug.sh &> output.txt
I could not find this indicated anywhere as an existing issue by
performing generic searches, apologies if this is known.
-Reid
Contents of stashbug.sh
------------------------
#!/bin/sh
uname -a
git --version
mkdir -p stashbug
cd stashbug
git init
mkdir dir
touch dir/tracked
git add dir/tracked
git commit -m 'initial'
tree; git status
mkdir dir/untracked_dir
touch dir/untracked_dir/casualty1
touch dir/casualty2
echo 'contents' > dir/tracked
tree; git status
git stash push dir/
git stash show -v
tree; git status
git stash pop
tree; git status
------------------------
Resulting output.txt
---------------------
+ uname -a
Darwin Reids-MacBook-Pro.local 15.6.0 Darwin Kernel Version
15.6.0: Tue Apr 11 16:00:51 PDT 2017;
root:xnu-3248.60.11.5.3~1/RELEASE_X86_64 x86_64
+ git --version
git version 2.14.1
+ mkdir -p stashbug
+ cd stashbug
+ git init
Initialized empty Git repository in /Users/reid/git/stashbug/.git/
+ mkdir dir
+ touch dir/tracked
+ git add dir/tracked
+ git commit -m initial
[master (root-commit) 895197e] initial
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 dir/tracked
+ tree
.
└── dir
└── tracked
1 directory, 1 file
+ git status
On branch master
nothing to commit, working tree clean
+ mkdir dir/untracked_dir
+ touch dir/untracked_dir/casualty1
+ touch dir/casualty2
+ echo contents
+ tree
.
└── dir
├── casualty2
├── tracked
└── untracked_dir
└── casualty1
2 directories, 3 files
+ git status
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: dir/tracked
Untracked files:
(use "git add <file>..." to include in what will be committed)
dir/casualty2
dir/untracked_dir/
no changes added to commit (use "git add" and/or "git commit -a")
+ git stash push dir/
Saved working directory and index state WIP on master: 895197e initial
+ git stash show -v
diff --git a/dir/tracked b/dir/tracked
index e69de29..12f00e9 100644
--- a/dir/tracked
+++ b/dir/tracked
@@ -0,0 +1 @@
+contents
+ tree
.
└── dir
└── tracked
1 directory, 1 file
+ git status
On branch master
nothing to commit, working tree clean
+ git stash pop
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: dir/tracked
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (93ceee344b947ecd8a27a672e3aedd2b2e1acc99)
+ tree
.
└── dir
└── tracked
1 directory, 1 file
+ git status
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: dir/tracked
no changes added to commit (use "git add" and/or "git commit -a")
---------------------