繁体   English   中英

Git switch分支,丢失未跟踪的文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM