git stash -u和git stash pop弹出后,缺少一些被忽略和未跟踪的文件

时间:2020-09-05 14:08:51

标签: git

我遇到了上述问题,为方便起见,我将使用一个小示例重新创建场景

nick@nick-linux:~/Desktop/bugtest$ git init
Initialized empty Git repository in /home/nick/Desktop/bugtest/.git/
nick@nick-linux:~/Desktop/bugtest$ echo original > file1.txt
nick@nick-linux:~/Desktop/bugtest$ mkdir data
nick@nick-linux:~/Desktop/bugtest$ echo datafile2 > data/file2.txt
nick@nick-linux:~/Desktop/bugtest$ git status
On branch master

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    data/
    file1.txt

nothing added to commit but untracked files present (use "git add" to track)
nick@nick-linux:~/Desktop/bugtest$ git add .
nick@nick-linux:~/Desktop/bugtest$ git commit -m "init commit"
[master (root-commit) 28ce869] init commit
 2 files changed, 2 insertions(+)
 create mode 100644 data/file2.txt
 create mode 100644 file1.txt
nick@nick-linux:~/Desktop/bugtest$ echo datafile3 > data/file3.txt
nick@nick-linux:~/Desktop/bugtest$ echo /data/* > .gitignore
nick@nick-linux:~/Desktop/bugtest$ cat .gitignore 
/data/*
nick@nick-linux:~/Desktop/bugtest$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .gitignore

nothing added to commit but untracked files present (use "git add" to track)
nick@nick-linux:~/Desktop/bugtest$ echo datafile4 > data/file4.txt
nick@nick-linux:~/Desktop/bugtest$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .gitignore

nothing added to commit but untracked files present (use "git add" to track)
nick@nick-linux:~/Desktop/bugtest$ git rm -r --cached data/
rm 'data/file2.txt'
nick@nick-linux:~/Desktop/bugtest$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    deleted:    data/file2.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    .gitignore


nick@nick-linux:~/Desktop/bugtest$ git add .
nick@nick-linux:~/Desktop/bugtest$ git commit -m "rm data, upload gitignore"
[master 399dd82] rm data, upload gitignore
 2 files changed, 1 insertion(+), 1 deletion(-)
 create mode 100644 .gitignore
 delete mode 100644 data/file2.txt
nick@nick-linux:~/Desktop/bugtest$ git status
On branch master
nothing to commit, working directory clean
nick@nick-linux:~/Desktop/bugtest$ echo change > file1.txt
nick@nick-linux:~/Desktop/bugtest$ 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:   file1.txt

no changes added to commit (use "git add" and/or "git commit -a")
nick@nick-linux:~/Desktop/bugtest$ ll
./
../
data/
file1.txt
.git/
.gitignore
nick@nick-linux:~/Desktop/bugtest$ git stash -u
Saved working directory and index state WIP on master: 399dd82 rm data, upload gitignore
HEAD is now at 399dd82 rm data, upload gitignore
nick@nick-linux:~/Desktop/bugtest$ ll
./
../
file1.txt
.git/
.gitignore
nick@nick-linux:~/Desktop/bugtest$ 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:   file1.txt

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (acb5e64200a875485799cb942c3898e1791abc5b)
nick@nick-linux:~/Desktop/bugtest$ ll
./
../
file1.txt
.git/
.gitignore

您可以看到最后数据文件夹消失了。我想知道它是如何工作的,以及如何恢复丢失的文件夹。谢谢!

我的工作配置是“ git版本2.7.4; ubuntu 16.04LTS”。


以上是一个示例,在此我介绍项目中的实际操作。查找丢失的文件夹可能会有所帮助。

我想在本地创建一个分支以提高开发效率,因此我阅读了有关Git Branch和Git Stash的文档,但实际上很难做到这一点。 我一直在master分支上工作,还有一些尚未提交的更改,所以

git stash --keep-index -u
git stash apply
git stash -u
git checkout -b newbranch
git stash pop
git stash drop stash@{0}

在新分支上工作了几个小时之后,我突然意识到我丢失了几个以前在master分支上未跟踪并标记为.gitignore的文件夹。此外,我还发现一些未跟踪的文件夹没有丢失,它们也标记为.gitignore。

在git stash -u或git checkout -b之后,我没有注意到这些文件夹何时丢失? 我切换回了Matser分支

git stash -u
git checkout master

,这些文件夹仍然丢失。

经过研究,我复制了上面的简单示例,并猜测这是造成损失的原因。

0 个答案:

没有答案
相关问题