Py学习  »  Git

Git交换机分支,丢失未跟踪的文件

Joshua Zastrow • 7 年前 • 1304 次点击  

我一直在做一个项目,我主要使用一个主分支,但也有一个开发分支,我做了很多工作。我切换到那个分支并切换回master,结果发现所有未跟踪的文件都不再在repo中了(env文件、数据文件夹以及其中的所有内容,config.json文件)。

似乎当我切换分支时,我的repo发生了变化,并放弃了.gitignore中的所有内容。有没有办法恢复所有这些文件?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30775
文章 [ 1 ]  |  最新文章 7 年前
torek
Reply   •   1 楼
torek    7 年前

我换了那个[ dev ]分支并切换回 master

最有可能的是那些文件 主人 并列入 .gitignore 目前 在小费中 DEV .

做:

git checkout dev

告诉你的Git: 将我的索引和工作树内容替换为提交到的内容 DEV 点。 因此,您的Git会找到冻结在特定提交中的所有文件,从该提交中提取它们,将它们放入索引中,然后将它们还原(解冻并解压缩)到您的工作树中。

这自然覆盖了 未跟踪的 工作树中的文件。但没什么大不了的,对吧?他们在承诺中。

然后你告诉Git: 将我的索引和工作树内容替换为提交到的内容 主人 点。 因此,您的Git会在 主人 ,提取它们,并像以前一样将它们放入索引和工作树中。这次,那些文件 不是 在承诺中。但它们被跟踪,并与提交的副本匹配,所以Git 移除 他们。

现在他们走了!

你可以在 DEV ,而不进行跟踪,使用 git show :

git show dev:file > file

这将提取提交时由 DEV ,生成输出到stdout,然后重定向到该文件。不幸的是它能让你得到一切 冻结在那个承诺中 不一定符合 在你的工作树上 当你跑 git checkout dev 原来。

通常,Git会在其中一个步骤中警告您这一点。如果您注意到这些警告并将文件移到一边,那么您已经将这些移到一边了。但是列出文件 吉蒂格诺 在某些情况下,具有给予Git的副作用 允许破坏其内容 . 所以有几个角落的情况下,Git会清除当前的内容,假设因为文件 吉蒂格诺 D,它们在任何方面都不珍贵。

恢复这些文件的唯一方法是在Git之外,使用诸如Mac上的Time Machine或系统备份。