【问题标题】:Recover files in git after reset --hard on added files(not committed!)重置后恢复 git 中的文件 --hard 添加文件(未提交!)
【发布时间】:2014-03-10 14:42:09
【问题描述】:

我有几个文件从未提交。 我已经添加了这些文件,但我错误地执行了“git reset --hard”

我想恢复那些文件。

请任何人帮助我。

【问题讨论】:

    标签: git recovery


    【解决方案1】:

    这是不可能的。这些文件丢失了。

    【讨论】:

    • 是的..你是对的。 “git reset --hard”实际上也从硬盘驱动器中删除了这些文件......所以没有办法恢复与以前相同的......但我找到了一种恢复与以前相同的方法。唯一的条件是“git 垃圾收集器”不能在“git reset --hard”之后运行
    【解决方案2】:

    如果此后您什么都没做,您仍然可以保存它们。 git 垃圾收集器不会立即运行。尝试关注this

    【讨论】:

    • 与“悬空提交”相比,它们更有可能显示为“悬空 blob”,但无论哪种方式,都是通用方法(git fsck --lost-found,然后查看丢失的目录)可以恢复文件。
    • 感谢您的回答...抱歉迟到了回复。
    • 我做了和你提到的一样的事情......但问题我明白了......我无法在我的整个 .git 目录中找到“lost-found”目录......(可能是我没有配置在“lost-found”目录中启用/存储 blob/commits 的东西。
    【解决方案3】:

    我只从 stackoverflow 中找到了答案。

    来自:How can I undo git reset --hard HEAD~1?

    (:) 这个答案在该页面中提到的所有答案中获得倒数第二票......但我必须说..这是唯一能拯救我的答案......)

    我这样做了:

    第一步:

    manan@manan-pc:~/new_cms/abc/.git$ GIT_DIR! $ git fsck
    Checking object directories: 100% (256/256), done.
    Checking objects: 100% (94312/94312), done.
    dangling blob 34122c30800b0fd91bb8418efbbb230e75fe3dbe
    dangling blob 0e25ccea407f3c19abc1433e5732a5f2a20191f6
    dangling blob 90afe07d111640d86f02e09e4939d02bbf3f5d56
    dangling blob e8b4dcb611257ddb13c29c09d39cc660a6bace02
    dangling blob 3ad660983baa3608cd333daa8c6d9d47420d5e0b
    dangling commit 8932f1f0c8df1917f38a6847a1f21fa54c6d6355
    dangling blob 86548593d0f3337ecb7bc5d665a9f48148d9d157
    dangling commit 6cf531cad6822132fd183e7e336a13f38d8fd8bd
    dangling commit 0c025ebf3fe8d1632ec11b4734fb504deb06aa0a
    dangling blob 6260329668086042177aab9f9a1e2a3720204bd8
    dangling blob 887732bd14017d1d4558160e12a3666b131a9604
    dangling blob f08e12e5724f7976f1596f963ac60e2ebd11b44c
    dangling blob 079077a183e8450ab35670b92fd2ce6a8a4b7a9a
    dangling commit 6dd8f3cddfc45340c6d0e0dc5fbaa2bd39b11fdb
    dangling blob 1ee3ffc72b23bfcfc08dcc0fee8eac10cd4ea6e2
    

    第二步:

    git show 34122c30800b0fd91bb8418efbbb230e75fe3dbe
    

    这将显示提交/更改,已在该文件中进行。 (就像正常的 'git show commit_no' 作品)

    但这只会在终端上显示前几行...

    一旦我们执行了“git reset--hard”,就没有办法自动恢复这个文件了...

    所以我做了诡计

    第三步:

    manan@manan-pc:~/new_cms/abc/.git$ GIT_DIR! $ git show 1ee3ffc72b23bfcfc08dcc0fee8eac10cd4ea6e2 > /home/manan/Desktop/sample.txt
    manan@manan-pc:~/new_cms/abc/.git$ GIT_DIR! $ git show 079077a183e8450ab35670b92fd2ce6a8a4b7a9a > /home/manan/Desktop/sample1.txt
    manan@manan-pc:~/new_cms/abc/.git$ GIT_DIR! $ git show f08e12e5724f7976f1596f963ac60e2ebd11b44c > /home/manan/Desktop/sample2.txt
    manan@manan-pc:~/new_cms/abc/.git$ GIT_DIR! $ git show 887732bd14017d1d4558160e12a3666b131a9604 > /home/manan/Desktop/sample3.txt
    manan@manan-pc:~/new_cms/abc/.git$ GIT_DIR! $ git show 6260329668086042177aab9f9a1e2a3720204bd8 > /home/manan/Desktop/sample4.txt
    manan@manan-pc:~/new_cms/abc/.git$ GIT_DIR! $ git show 0c025ebf3fe8d1632ec11b4734fb504deb06aa0a > /home/manan/Desktop/sample5.txt
    manan@manan-pc:~/new_cms/abc/.git$ GIT_DIR! $ git show 6cf531cad6822132fd183e7e336a13f38d8fd8bd > /home/manan/Desktop/sample6.txt
    manan@manan-pc:~/new_cms/abc/.git$ GIT_DIR! $ git show 86548593d0f3337ecb7bc5d665a9f48148d9d157 > /home/manan/Desktop/sample7.txt
    manan@manan-pc:~/new_cms/abc/.git$ GIT_DIR! $ git show 8932f1f0c8df1917f38a6847a1f21fa54c6d6355 > /home/manan/Desktop/sample8.txt
    manan@manan-pc:~/new_cms/abc/.git$ GIT_DIR! $ git show 3ad660983baa3608cd333daa8c6d9d47420d5e0b > /home/manan/Desktop/sample9.txt
    manan@manan-pc:~/new_cms/abc/.git$ GIT_DIR! $ git show e8b4dcb611257ddb13c29c09d39cc660a6bace02 > /home/manan/Desktop/sample10.txt
    manan@manan-pc:~/new_cms/abc/.git$ GIT_DIR! $ git show 90afe07d111640d86f02e09e4939d02bbf3f5d56 > /home/manan/Desktop/sample11.txt
    manan@manan-pc:~/new_cms/abc/.git$ GIT_DIR! $ git show 0e25ccea407f3c19abc1433e5732a5f2a20191f6 > /home/manan/Desktop/sample12.txt
    manan@manan-pc:~/new_cms/abc/.git$ GIT_DIR! $ git show 34122c30800b0fd91bb8418efbbb230e75fe3dbe > /home/manan/Desktop/sample13.txt
    manan@manan-pc:~/new_cms/abc/.git$ GIT_DIR! $ git show 6dd8f3cddfc45340c6d0e0dc5fbaa2bd39b11fdb > /home/manan/Desktop/sample14.txt
    

    (感谢我的大学教授......他聪明地教我们如何使用 *NIX 操作系统的输入/输出重定向。)

    第 4 步: 将这些文件替换为原始文件。

    通过这种方式,您可以在“git reset --hard”之后“手动”恢复以前的更改 ....

    希望你永远不会遇到这种情况……

    :)

    【讨论】:

      猜你喜欢
      • 2017-06-04
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 2016-06-25
      • 2021-02-22
      • 2020-05-07
      相关资源
      最近更新 更多