我遇到了上述问题,为方便起见,我将使用一个小示例重新创建场景
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
,这些文件夹仍然丢失。
经过研究,我复制了上面的简单示例,并猜测这是造成损失的原因。