丢失了我的git repo中的所有文件,重置不起作用.发生了什么?

rya*_*lon 4 git github

前言

我是git的新手,并且已经在一个项目中使用了几个月,并且决定在Github上提供它.我刚刚发现我的备份脚本几乎正常工作,所以我备份了一切,但它很草率.Pheww ......但我希望是B计划.

问题

我意识到一些netCDF数据文件基本上是在版本控制(=大型.git存储库)中复制的,所以我试图通过首先将这些文件扩展名(和一些测试/数据目录)添加到.gitignore根目录中的文件来排除这些文件.这似乎只是忽略这些文件的版本控制,但仍然包含在.git存储库中.然后我将它们添加到了.git/info/exclude,我相信它完全从存储库中忽略它们.

每次发现,我都先做了一次

git pull [my_repo] master
Run Code Online (Sandbox Code Playgroud)

那么一个

git push [my_repo] master
Run Code Online (Sandbox Code Playgroud)

在第二次迭代之后(当我认为我只添加了.gitignore的东西时),我收到一条错误,指出我对需要合并的文件有一些问题.我首先创建了.gitignoregitHub,这是不同的,我认为这是问题并开始合并.

在第三次迭代(已经添加了.git/info/exclude文件),一切都很顺利,但我看到只有我想要的目录EXCLUDED出现在gitHub上.回到我的磁盘上,其他一切都消失了,包括netCDF数据文件......

我试过了git reset --hard master,重置时一切都一样.

任何人都可以对此有所了解吗?可能的解决方案?

我似乎无法找到类似的问题; 但是,我想我不可能是第一个做到这一点的人.

zan*_*ray 5

编辑:TL; DR版本:

如果你在repo中找到了你想要被git忽略的文件:

  1. 只从git存储库中删除它

    git rm --cached filesToIgnore

  2. 将文件或通配符规则(例如*.swp)放在.gitignore文件中.然后使用a保存存储库git commit

好吧,我没有将它们完全拼凑在一起但是让我们分解出错了:

1.有什么区别.gitignore.git/info/exclude不同之处在于,前者被签入到资源库,并且项目特定文件忽略,而后者是环境特定的文件,如.swp关于vim的临时文件的文件.

考虑到这一点,将文件放入.git/info/exclude文件只会忽略新文件,而不是已经存储库的文件(我假设netCDF文件是)

第2位.使用git pull,它首先git fetch为远程存储库执行a操作,然后尝试合并远程存储库和本地存储库.为什么这有关系?因为如果您有任何本地未经检查的文件,它会抱怨.这是我猜你看到的错误.

3.由于您强制合并,您可能最终丢弃任何未签入的文件.这些都消失了.因为他们从未被检查过git,所以git不知道他们.

编辑:但是,正如cHao指出的那样,git提交中的任何先前文件仍然存在.查看您的存储库git log并暂时检出它们中的任何一个git checkout <checksumNumber>.用于git reset --hard <checksumNumber>将存储库永久重置为该提交.

4.当您发现git存储库中要忽略正确进程的文件时,您需要做什么

git rm --cached filesToIgnore

这将从git仓库中删除它们,但不会从工作目录中删除它们.

然后将它们添加到.gitignore文件中,提交更改,你应该很高兴.