Re: Lost files after git stash && git stash pop
- From
Torsten Bögershausen <tboegi@web.de>
- Date
- Jul 22, 2023, 21:44 UTC
- Message-ID
- <20230722214433.3xfoebf7my5wsihf@tb-raspi4>
- In-Reply-To
- <5260C6A0-C53C-4F6D-B899-6AD8601F8458@gmail.com>
On Fri, Jul 21, 2023 at 07:31:53PM +0200, Till Friebe wrote:
Show 23 quoted lines
> Thank you for filling out a Git bug report! > Please answer the following questions to help us understand your issue. > > What did you do before the bug happened? (Steps to reproduce your issue) > ``` > git init > mkdir README > touch README/README > git add . > git commit -m "Init project" > echo "Test" > README/README > mv README/README README2 > rmdir README > mv README2 README > git stash > git stash pop > ``` > > What did you expect to happen? (Expected behavior) > I expected that after the `git stash pop` the README file would be back. > > What happened instead? (Actual behavior) > This README with "Test" file was deleted and I lost 5 hours of work.
That is always sad to hear, when work is lost.
However, I personally wonder if this is a bug or not. First, Git is told to track a file called README/README Then the file is removed, without telling Git. And a new, unkown file appers on disk (which collides with the name of the directory)
Using this sequence could have told Git, what is going on: git mv README/README README2 rmdir README git mv README2 README
(a temporary branch may be checked out, with the option to merge-squash the final result)
An other alternative could be to tell `git stash` to care about untracked file(s):
git stash -u git stash pop
Which will refuse to apply the stash.
A third alternative could be to keep the file inside an editor, to have the content still available.
However, it would/could be nice, if files are not simply deleted, but saved into a "lost+found" folder, or a wastebasket kind of thing.
But which files ? Those that are untracked ? They may be important (local config files, passwords, help scripts, ...) or not (.o files from a C compiler).
In some older discussions they had been named "precious" files. But, as far as I remember, there was no easy solution. In that sense I don't have a better answer. Others may have.
Thanks for reporting, it make me read [1] and come to the conclusion that it is sometimes safer to checkout out a temporary branch, commit everything and clean up later, rather than relying too much on `git stash`
<https://stackoverflow.com/questions/835501/how-do-you-stash-an-untracked-file>
Show 7 quoted lines
> > What's different between what you expected and what actually happened? > The file doesn't exist anymore and I can't recover it. > > Anything else you want to add: > This is just a reproducible example. >