From: Junio C Hamano Date: Fri, 28 Jun 2013 19:37:18 GMT Subject: Re: [PATCH] git stash: Avoid data loss when saving a stash Message-ID: <7vbo6qni1d.fsf@alter.siamese.dyndns.org> In-Reply-To: <20130628150532.GD12252@machine.or.cz> Petr Baudis writes: > diff --git a/git-stash.sh b/git-stash.sh > index 1e541a2..3cb9b05 100755 > --- a/git-stash.sh > +++ b/git-stash.sh > @@ -258,6 +262,12 @@ save_stash () { > say "$(gettext "No local changes to save")" > exit 0 > fi > + if test -z "$untracked$force" -a -n "$(git ls-files --killed | head -n 1)"; then > + say "$(gettext "The following untracked files would NOT be saved but need to be removed by stash save:")" I think "ls-files --killed" was not adjusted for the new world order when submodules were introduced. With this change, you see t7402 break, even though "git status" would say # Changes not staged for commit: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working # directory) # # modified: file # modified: submodule (new commits) The path "submodule" in HEAD and the index is already submodule, so "stash save" that reverts to the original state will _not_ have to kill it, but the new check triggers it. Exactly the same breakage this patch introduces triggers in t7610, too. I think another patch to teach "ls-files --killed" what to do with submodules is needed as a preliminary step before this patch.