[英]Untracked files lost after git stash, working on branch and stash pop
[英]Git switch branch, lost untracked files
我一直在做一个我主要使用主分支的项目,但是我做了一个开发分支,但是没有做太多的事情。 我切换到那个分支并切换回Master,却发现我所有未跟踪的文件都不在我的仓库中(.env文件,数据文件夹及其中的所有内容,config.json文件)。
似乎当我切换分支时,我的回购改变了并丢弃了.gitignore中的所有内容。 有没有办法恢复所有这些文件?
我切换到[
dev
]分支并切换回master
...
最有可能的是,那些在master
未跟踪并且在.gitignore
列出的文件存在于dev
的tip提交中。
这样做:
git checkout dev
告诉你的Git: 将我的索引和工作树内容替换为dev
指向的提交内容。 因此,您的Git会找到冻结到该特定提交中的所有文件,从该提交中提取它们,将它们放入索引中,然后将它们解压缩(解压缩并解压缩)到您的工作树中。
这自然会覆盖工作树中未跟踪的文件。 但这没什么大不了的,对吗? 他们在提交。
然后你告诉Git: 将我的索引和工作树内容替换为master
指向提交的内容。 因此,您的Git会在master
的提示处找到冻结在提交中的所有文件,将其提取出来,然后像以前一样将它们放入索引和工作树中。 这次,这些文件不在提交中。 但他们被跟踪,并匹配承诺的副本,所以Git 删除它们。
现在他们走了!
你可以使用git show
将它们从dev
的尖端中提取出来,而不是跟踪它们。
git show dev:file > file
这将提取dev
标识的提交内容,生成输出到stdout,然后重定向到文件。 这里不幸的部分是它可以让你得到冻结在那个提交中的任何内容,当你最初运行git checkout dev
时,它不一定与你的工作树中的内容相匹配。
很多时候,Git会在其中一个步骤中警告你。 如果您注意这些警告并将文件移开,则可以使用移出的副本。 但是在.gitignore
列出文件会产生副作用,在某些情况下,允许Git 删除其内容 。 因此,有一些极端情况下Git将消除当前内容,假设因为文件是.gitignore
d,它们在任何方面都不是珍贵的。
恢复此类文件的唯一方法是在Git之外,例如使用Mac上的Time Machine或系统备份。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.