【问题标题】:Restore Deleted Files from SourceTree or Git从 SourceTree 或 Git 恢复已删除的文件
【发布时间】:2013-04-22 09:47:08
【问题描述】:

我最近开始使用 SourceTree 来处理 Bitbucket。我正在处理一个项目,然后我决定需要将其移动到不同的文件夹(出于各种原因)。因此,我剪切了我在 repo 中处理的文件,然后单击 SourceTree 中的删除按钮,但没有意识到这样做实际上会删除文件。我剪切了文件以防万一,但不记得粘贴这些文件需要原始文件存在。

现在,我只有 SourceTree 没有删除的 repo 剩下的文件。这些是 objects 目录中的文件,我没有 infopack 文件夹中的 @ 987654326@目录。

有什么方法可以恢复文件吗?我查看了this questionthis question,但是我是 git 新手,不知道如何实际执行这些操作。

请帮忙!如何恢复 repo 中的文件?

【问题讨论】:

  • 您是否在删除这些文件之前提交了这些文件?你还能在旧版本的时间线中看到它们吗?
  • @Thilo 正如我所说,我从 SourceTree 中删除了整个 repo。当我尝试重新导入它时,它会出现 128 错误代码。不,我没有提交文件。
  • 如果你从不提交被删除的文件,那么 git 就无法恢复它们。你能提供给我们git log --graph --oneline --decorate --all -20的结果吗?而git status 的结果也将有助于更好地了解情况。

标签: git atlassian-sourcetree


【解决方案1】:

如果提交了这些文件,您可以只创建git checkout HEAD -f
如果文件未提交,则它们不会存储为对象。

【讨论】:

    【解决方案2】:

    以下是 Sourcetree 中对我有用的解决方法:

    1. 确定文件被删除的提交。

    2. 转到工具-> 选项-> 自定义操作。

    3. 创建一个新的自定义操作,如下所示: custom action screen

      结帐 $SHA~1 -- $FILE

    4. 转到删除文件的提交(在步骤 1 中找到),点击文件并选择自定义操作 -> 您刚刚定义的自定义操作: Restoring the file

    5. 不幸的是,Sourcetree 显示错误并且无法完成工作。 Error in Sourcetree GUI

    6. 我始终启用“显示完整输出”选项,因此我必须手动关闭窗口,这在您需要创建合并请求时很有用(链接将在那里您只需复制它,没有这个窗口自动关闭,您将错过复制它的更改)。如果您看不到该窗口,可能是因为您禁用了该功能(这是默认设置)

    7. 从窗口复制命令。

    8. 打开一个 git 终端(从 sourcetree 右上角) Git terminal launcher on Sourcetree

    9. 粘贴命令(shift + insert)并按回车键。 Git Console

    10. 瞧!您的文件已恢复。

    在最后一张图片中,您可以看到(失败)尝试从文件被删除的提交中恢复,但实际上您需要从上一次提交中恢复,这就是前两次尝试失败而后来成功的原因(这就是~1 在 SHA 末尾的原因)。

    希望对您有所帮助,祝您编码愉快。

    【讨论】:

    • 刚刚尝试过,#1-4 在 Sourcetree 中完美运行,没有任何错误。也许他们已经解决了之前导致它失败的问题。感谢您的帮助!
    猜你喜欢
    • 2015-10-12
    • 2020-07-09
    • 2014-02-03
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 2012-06-09
    • 1970-01-01
    相关资源
    最近更新 更多