git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* git stash --include-untracked possible destructive behavior
@ 2017-06-08 11:52 Marc Strapetz
  2017-06-08 22:13 ` Joel Teichroeb
  0 siblings, 1 reply; 5+ messages in thread
From: Marc Strapetz @ 2017-06-08 11:52 UTC (permalink / raw)
  To: git

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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: git stash --include-untracked possible destructive behavior
  2017-06-08 11:52 git stash --include-untracked possible destructive behavior Marc Strapetz
@ 2017-06-08 22:13 ` Joel Teichroeb
  2017-06-08 22:29   ` Brandon Williams
  0 siblings, 1 reply; 5+ messages in thread
From: Joel Teichroeb @ 2017-06-08 22:13 UTC (permalink / raw)
  To: Marc Strapetz, git

It looks like it's an issue with git clean, as that's what stash uses 
internally. You can try your same test, but replace git stash with "git 
clean -df" and it will delete Data. Maybe clean should check if there 
are any ignored files in an untracked directory and only remove it if -x 
is specified?

Joel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: git stash --include-untracked possible destructive behavior
  2017-06-08 22:13 ` Joel Teichroeb
@ 2017-06-08 22:29   ` Brandon Williams
  2017-06-08 22:39     ` Joel Teichroeb
  0 siblings, 1 reply; 5+ messages in thread
From: Brandon Williams @ 2017-06-08 22:29 UTC (permalink / raw)
  To: Joel Teichroeb; +Cc: Marc Strapetz, git

On 06/08, Joel Teichroeb wrote:
> It looks like it's an issue with git clean, as that's what stash
> uses internally. You can try your same test, but replace git stash
> with "git clean -df" and it will delete Data. Maybe clean should
> check if there are any ignored files in an untracked directory and
> only remove it if -x is specified?
> 
> Joel

There was someone working on fixing clean, you can look at the patch
series at
https://public-inbox.org/git/20170523100937.8752-1-sxlijin@gmail.com/
though I'm unsure of the series' status.

-- 
Brandon Williams

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Re: git stash --include-untracked possible destructive behavior
  2017-06-08 22:29   ` Brandon Williams
@ 2017-06-08 22:39     ` Joel Teichroeb
  2017-06-09  8:28       ` Marc Strapetz
  0 siblings, 1 reply; 5+ messages in thread
From: Joel Teichroeb @ 2017-06-08 22:39 UTC (permalink / raw)
  To: Brandon Williams; +Cc: Marc Strapetz, git

Looks like that series was merged last week, fixing this issue.

Marc, the fix will probably be in git 2.14.

Joel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: git stash --include-untracked possible destructive behavior
  2017-06-08 22:39     ` Joel Teichroeb
@ 2017-06-09  8:28       ` Marc Strapetz
  0 siblings, 0 replies; 5+ messages in thread
From: Marc Strapetz @ 2017-06-09  8:28 UTC (permalink / raw)
  To: Joel Teichroeb, Brandon Williams; +Cc: git

On 09.06.2017 00:39, Joel Teichroeb wrote:
> Looks like that series was merged last week, fixing this issue.
> 
> Marc, the fix will probably be in git 2.14.

Thanks, I can confirm that with current master "git clean" as well as 
"git stash" are working properly now (tested on Linux). I'm looking 
forward to version 2.14.

-Marc

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-06-09  8:28 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-06-08 11:52 git stash --include-untracked possible destructive behavior Marc Strapetz
2017-06-08 22:13 ` Joel Teichroeb
2017-06-08 22:29   ` Brandon Williams
2017-06-08 22:39     ` Joel Teichroeb
2017-06-09  8:28       ` Marc Strapetz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).