【问题标题】:git staged file twice, can you recover the old version?git staged 文件两次,你能恢复旧版本吗?
【发布时间】:2016-07-27 09:39:26
【问题描述】:

如果我对 file.txt 进行更改

然后git add file.txt

然后我对 file.txt 进行更多更改

然后我再次git add file.txt

我意识到我在第二次更改/编辑文件时犯了一个错误。你能回到我最初上演的文件版本吗?

【问题讨论】:

  • 在这种情况下,最好的选择是一个好的编辑器或 IDE。

标签: git stage


【解决方案1】:

正如 J. Titus 在评论中所说:

您从未承诺提供参考,所以没有。

【讨论】:

    【解决方案2】:

    是的,理论上这些对象仍然在 .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 搜索所需的任何内容)。跨度>
    猜你喜欢
    • 2012-05-30
    • 1970-01-01
    • 2011-12-09
    • 2022-07-07
    • 2014-03-31
    • 2023-03-14
    • 2017-08-20
    • 1970-01-01
    • 2018-03-15
    相关资源
    最近更新 更多