【问题标题】:Restoring a file from Git?从 Git 恢复文件?
【发布时间】:2009-07-28 11:30:27
【问题描述】:

问题与问题"How to restore Git after fatal file system error?"有关,但针对单个文件。

我需要到达最后一个状态 2009-07-27 23:58,我需要文件:

/Users/henri/BAckup/6-relationdiagram/Normalized_perhaps_DB/simple_schema0.tcuml

如何在崩溃后恢复文件?

添加:我在哪里可以找到文件?他们应该做什么?

格雷厄姆的提示

$git checkout 63c6844fded9cfcdee14c9330be82557046b3e56 HENRI_suunnittelu_doc/6-relaatiotietokantakaavio/Normalized_perhaps_DB/simple_schema0.tcuml

威廉的提示

git checkout bee6763b55cf8259438aa575cedbb09d1d02b96a  HENRI_suunnittelu_doc/6-relaatiotietokantakaavio/Normalized_perhaps_DB/simple_schema0.tcuml

【问题讨论】:

  • 答案中的错字已更正。应该是 --since='...'(添加一个 '=')

标签: git crash restore


【解决方案1】:

如果您需要从存储库中的提交中获取单个文件,那么 git checkout 将为您完成。具体来说:

git checkout <sha> <filename>

将从提交 中检索文件 到您当前的工作副本中。可以是对任何提交的任何引用,因此它可以是分支名称、标签名称、HEAD^^^^ 或任何你想要的东西......

【讨论】:

  • "Not just one Class diagram" 是该提交的日志消息,而不是提交 ID。您需要某种方式来引用提交 - 例如提交的 SHA1 ID。 git log 应该可以给你。
  • 切换到你的 git 目录的顶层。运行 'git ls-tree -r --name-only master' 以检查您要恢复的文件是否处于 'master' 中(从包含的屏幕截图来看,它看起来像 2009-07-27 23:58 状态)。运行git checkout master -- &lt;filename&gt;&lt;filename&gt; 所在的位置出现在 git-ls-tree 输出中
【解决方案2】:

有时我会删除本地 git 中的文件或目录,而我只想恢复该文件。我运行以下命令:

 git checkout -- filenameOrDirectory

注意中间的空格。

【讨论】:

  • 所以没有 和 --,文件/目录从上次提交恢复。
  • 是的,但它取自您的本地存储库。因此,例如,如果您最近有“git pull”,然后更改了一个特定文件,那么您决定要将其恢复到您上次执行 git pull 时的位置,您可以使用此命令。我觉得很方便。它将文件恢复到最后一个 git pull 状态,这实际上是您的本地 repo 状态。你可以试试看。删除任何文件或目录,然后运行它,它应该会恢复。
【解决方案3】:

您在任何地方都有未损坏的存储库副本吗?如果是这样,请从那里拉到您的工作目录,然后签出该文件。你可以这样做:

git log --since='2009-07-27 23:58' --pretty=oneline -n​​ 1

获取你想要的哈希然后通过以下方式获取文件:

git checkout

如果您没有未损坏的存储库工作副本,您可以尝试“git fsck”,但如果文件丢失,您成功的机会很小或为零。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    • 2011-09-26
    • 2019-07-21
    • 2012-06-09
    • 2020-05-28
    • 1970-01-01
    • 2019-03-09
    相关资源
    最近更新 更多