【发布时间】:2016-07-27 09:39:26
【问题描述】:
如果我对 file.txt 进行更改
然后git add file.txt
然后我对 file.txt 进行更多更改
然后我再次git add file.txt
我意识到我在第二次更改/编辑文件时犯了一个错误。你能回到我最初上演的文件版本吗?
【问题讨论】:
-
在这种情况下,最好的选择是一个好的编辑器或 IDE。
如果我对 file.txt 进行更改
然后git add file.txt
然后我对 file.txt 进行更多更改
然后我再次git add file.txt
我意识到我在第二次更改/编辑文件时犯了一个错误。你能回到我最初上演的文件版本吗?
【问题讨论】:
正如 J. Titus 在评论中所说:
您从未承诺提供参考,所以没有。
【讨论】:
是的,理论上这些对象仍然在 .git/objects 中,直到下一次运行 git gc(在某些其他操作之后自动发生)。
不幸的是,要弄清楚哪个对象可能很棘手。如果文件是最近编辑和添加的,那么时间戳会有所帮助。
ls -lrt .git/objects/*/* | tail
-r--r--r-- 1 ams users 6976 Apr 6 19:53 .git/objects/0c/3546bd9101264cd6a9fb1fb54cea04c6e0a4b8
如果您看到一个带有可能时间戳的文件,那么您可以像这样检索内容:
git show 0c3546bd9101264cd6a9fb1fb54cea04c6e0a4b8
【讨论】:
git add 将文件的内容作为(通常是新的)blob 对象输入到存储库中,因此您只需(哈哈)找到该 blob。 ls-by-time 方法是一种方法,另一种方法是使用 git fsck --lost-found 将未引用的 blob 放入目录 .git/lost-found/other(然后您可以通过 grep 搜索所需的任何内容)。跨度>