从Git中恢复文件?

3
这个问题与"如何在致命文件系统错误后恢复Git?"有关,但只针对单个文件。
我需要回到2009-07-27 23:58的最后状态,我需要这个文件:
/Users/henri/BAckup/6-relationdiagram/Normalized_perhaps_DB/simple_schema0.tcuml

如何在崩溃后恢复文件?

补充:我应该在哪里找到文件?他们应该做什么?

Graham的提示

$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='...'(添加一个'=')。 - William Pursell
3个回答

4
如果您需要从存储库中的提交中获取单个文件,则可以使用git checkout命令。具体来说:
git checkout <sha> <filename>

将会把提交 <sha> 中的文件 <filename> 检出到你当前的工作目录。<sha> 可以是任何提交的引用,因此它可以是分支名称、标签名称、HEAD^^^^ 或者任何你想要的东西...


“不只是一个类图”是该提交的日志消息,而不是提交ID。您需要某种引用提交的方式,例如提交的SHA1 ID。git log应该能够提供给您。 - Graham
1
转换为git目录的顶层。运行“git ls-tree -r --name-only master”检查要恢复的文件是否在'master'分支中(从包含的截图看起来是2009-07-27 23:58状态)。运行git checkout master -- <filename>,其中<filename>是git-ls-tree输出中显示的名称。 - Jakub Narębski

2
有时我会在本地的git中删除一个文件或目录,而我只想恢复那个被删除的文件。我执行以下命令:
 git checkout -- filenameOrDirectory

请注意中间的空格。

因此,如果没有使用<sha>并且使用--,则文件/目录将从上次提交中恢复。 - Léo Léopold Hertz 준영
1
是的,但它是从您的本地存储库中获取的。例如,如果您最近进行了“git pull”,然后更改了一个特定文件,然后决定将其恢复到上次执行git pull时的状态,则可以使用此命令。我觉得这非常方便。它将文件恢复到上次git pull的状态,这实际上是您的本地存储库状态。您可以尝试一下。删除任何文件或目录,然后运行此命令,应该会被还原。 - j2emanue

1

你有没有一个未损坏的代码库副本?如果有,从那里拉取到你的工作目录,然后检出文件。你可以这样做:

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

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

git checkout <file> <hash>

如果你没有未损坏的工作副本,你可以尝试使用 'git fsck',但如果文件已经丢失,你成功的机会很小或者为零。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接