搞乱GIT历史破坏了最近的承诺......如何恢复?

时间:2010-09-28 12:36:29

标签: git

因此。我是git的新手。我想我可能已经破坏了一些超出我修复能力的东西(万岁)。

以下是细分:

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

我了解到,仅删除文件并提交删除对于克隆目录的人没有帮助,并且通过以下命令了解了如何修改历史记录:

git filter-branch --tree-filter 'rm -f public/vidos/*' HEAD
据我所知,

将从public / vidos /目录中删除所有文件,并删除它们的所有内存。

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

然后,今天早上,(愚蠢地确定我完全匹配了远程存放处(即摆脱了我所有的本地东西,认为它应该是除了那些大文件之外的所有东西)我开始做的工作目录,并意识到所有文件看起来都像初始登记时一样(没有修改,并且有很多我修改的东西,正在显示)

我做了

git log

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

git reset hashcode

回滚到相应的git(使用从日志中获取的哈希码)。

除非......即使它认为我处于正确的提交状态,但FILES仍然与我最初提交的文件相同。

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

我做了一些愚蠢的事吗?搞乱历史会做我不知道的事情吗?我描述的事情搞砸我的存储库是完全不可能的吗? (即我应该朝着完全不同的方向看?)

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

编辑:

~~~~~~~~~~~ 好的,重置不起作用,但正在执行:

git checkout hashcode

似乎工作正常,我可以看到我的代码更改。

但是,结帐意味着我不在任何分支机构,我不能将这些变更提交为最“最近”(它认为它是最新的)。关于如何让这个承诺成为“头”的任何想法?一旦它是头,将摆脱我做的分支过滤摆脱超级大文件?如果是这样的话,是否有任何人对如何摆脱那些超级大文件有任何建议而没有再次头痛。

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

1 个答案:

答案 0 :(得分:1)

基本上,

 git checkout hashcode

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

我认为可能发生的部分原因是我对git存储库的理解不完整。我以前从来没有真正管过一个,但是我有一个半静音的概念,即git存储库总是“最新的”,并且它有最新版本的东西。当我进行分支过滤时,我在git存储库中,我注意到过滤器处于git状态需要提交。所以我做了。可能存储库实际上并不是“最新的”,因此在提交(以及轻率地覆盖事物)时,我可能会覆盖更改并基本上回滚。