2010-09-28 94 views
4

所以。我是git的新手。而且我想我可能已经超出了我的修复能力(hooray)。与GIT历史混淆摧毁最近提交...如何恢复?

这里的故障:

我做了一个远程目录,并意外地包含在最初的一些非常大的文件提交。这使得人们很难用它做任何事情。 (我一开始并没有意识到,并且已经进行了修改,并且一直使用我自己的目录)

我了解到,仅删除文件并提交删除操作并不能帮助克隆目录的人员,并了解通过命令来修改历史,如:

git filter-branch --tree-filter 'rm -f public/vidos/*' HEAD 

这会,据我所知,从公共/ VIDOS /目录中删除所有文件,摆脱他们的所有内存。

这似乎发生了。我可以成功克隆(无内存错误),并且克隆副本中没有超大文件。

今天早上(愚蠢地确认我确实匹配了远程存储库后(即摆脱了我所有的本地资料,认为它应该是最新的除了那些大文件以外的任何东西),我开始与在目录中,并实现了所有的文件似乎是因为他们在初始检查(无修改,有事情我修改了很多,都显示出来)

我做

git log 

查看所有修改,并可以看到我的所有提交(包括从目录中删除超大文件的提交)。我没有

git reset hashcode 

回滚到适当的混帐(与我从日志中得到的散列码)。

除...即使它认为我是在正确提交,文件仍等同于那些我在第一次开机。

我可以回头看看自己的历史,看到我没对任何目前未修改的文件都进行过滤分支...我真的很困惑,为什么我的更改不再存在。我承诺...我推...我非常确定远程存储库有我所有的变化(可以检查出来(会永远耗尽内存,但我会得到的文件),并看到更改.. ......但我再也看不到他们了

我做了些什么愚蠢的东西吗?是否搞乱了历史做了一些我没有意识到的事情?我描述的事情是不是完全不可能搞砸了我的(也就是说,我应该看到一个完全不同的方向吗?)

我真的,真的想让我的修改回来......复制所有的代码(并记住我甚至是DID)将是非常困难的有什么我可以做的吗?

编辑:

~~~~~~~~~~~ 好吧,重置没有工作,但这样做:

git checkout hashcode 

似乎工作就好了,我可以看到我的代码改变了。

但是,结帐意味着我不在任何分支,我不能让他们承诺这些变化是最“最近的”(它认为它是最新的)。关于如何让这个承诺成为“头脑”的任何想法?而一旦它是头,那么将摆脱我为了摆脱超大文件而进行的分支过滤吗?如果是这样,有没有人有任何建议,如何摆脱这些超级大文件没有这种头痛再次。

如果没有其他方法,我可以简单地签出两个副本(一个在头,一个在我最后一个好的提交)并手动复制并粘贴好头文件,然后提交?似乎它会工作,但不是很干净。

+0

'git reflog'说什么?在那里你可以找到那里的任何不可达的提交? – VonC 2010-09-28 12:41:05

+0

它说:64e3dcb ... HEAD @ {0}:64e3dcb92ca80d6d53bb92d9470ca269f73ae044:更新HEAD 7d71565 ... HEAD @ {1}:clone:from [email protected]:/ var/git/pcms_vodpop – Jenny 2010-09-28 12:46:43

+0

但是...恩......我感觉它太短了,因为我愚蠢地删除了我的本地副本,并将其克隆出来以测试克隆是否仍在工作。 – Jenny 2010-09-28 12:47:06

回答

1

基本上,

git checkout hashcode 

做什么,我想混帐复位会。我不确定为什么当我分支过滤时,所做的更改会回滚,但现在我至少可以再次看到代码,我只是手动将更改复制到头部的克隆中,然后再次重新检查更改。不是最优雅的解决方案,但我必须保持我的过滤并拥有最新的代码。

我想可能发生的一部分是我对git存储库的不完全理解。我以前从来没有真正管理过一个,但是我有一个简单的概念,即git存储库始终是“最新的”,并且它拥有最新版本的东西。当我做分支过滤时,我在git仓库中,并且我注意到过滤器处于git状态,因此需要进行提交。所以我做了。可能这个版本库实际上并不是“最新版本”,所以在提交(并且愉快地重写)时,我可能覆盖了更改并基本上将事情推回。

+0

git reset只会重置索引;你想要git reset --hard。 – 2010-09-28 19:24:43