【发布时间】:2017-07-07 18:11:53
【问题描述】:
假设我有这个目录结构:
项目根 | +--父母 | +--孩子 | +--baby_brotherbaby_brother 是一个新目录,没有被 git 跟踪。我对child 中的文件也有很多更改。我需要临时访问 child 中文件的早期版本,所以我想我只是隐藏我的更改:
cd $project_root/parent/child
git stash push .
然后:
cd $project_root/parent/child
git stash pop
现在,令我沮丧的是,baby_brother 和一周的工作都不见了。 :-(
我有两个问题:
有什么方法可以找回我的文件吗?我怀疑答案是否定的。
这是一个错误,还是我做错了什么?
我看到an SO question 说 git 删除未跟踪的文件是预期的行为,但一方面,它还说这在 1.7.1.1 中已修复(我使用的是 2.13.0),另一方面,我预计存储只会影响child,因为我在那个目录中并且在命令末尾包含一个点来引用当前目录。
这是一个演示问题的快速重现:
1 ~ % mkdir 项目根目录 2 ~ % cd 项目根目录 3 project_root % mkdir 父级 4 project_root % 触摸父/文件 5 project_root % mkdir 父/子 6 project_root % 触摸父/子/file2 7 项目根 % git 初始化 在 /home/pdaddy/project_root/.git/ 中初始化空的 Git 存储库 8 项目根 % git add 。 9 project_root % git commit -m '在 git 中获取' [master (root-commit) 2d0872c] 在 git 中获取 2 个文件更改,0 次插入 (+),0 次删除 (-) 创建模式 100644 父/子/file2 创建模式 100644 父/文件 10 project_root % mkdir parent/baby_brother 11 project_root % 触摸父母/baby_brother/file3 12 project_root % 触摸父/file4 13 project_root % 触摸文件5 " 14 project_root % comment="事实证明,file4 和file5 也将被删除。 15 project_root % 树 $PWD /home/pdaddy/project_root |-- 文件5 `-- 父级 |-- 宝贝兄弟 | `--文件3 |-- 孩子 | `--文件2 |-- 文件 `--文件4 3个目录,3个文件 16 project_root % echo '一些改变' >> 父/子/file2 17 project_root % cd 父/子 18 孩子 % git stash push 。 在 master 上保存工作目录和索引状态 WIP:2d0872c 在 git 中获取 19 project_root % 树 ~/project_root /home/pdaddy/project_root `-- 父级 |-- 孩子 | `--文件2 `-- 文件 2个目录,2个文件 20 孩子 % git stash pop 在分支主 未为提交暂存的更改: (使用“git add ...”来更新将要提交的内容) (使用“git checkout -- ...”丢弃工作目录中的更改) 修改:文件2 没有添加到提交的更改(使用“git add”和/或“git commit -a”) 删除了 refs/stash@{0} (80e41d0ed1f2b0a085d4f5ca3a38833a18873f98) 21 孩子 % 树 ~/project_root /home/pdaddy/project_root `-- 父级 |-- 孩子 | `--文件2 `-- 文件 2个目录,2个文件【问题讨论】: