从git中的旧提交恢复文件

时间:2011-07-08 11:53:10

标签: git git-checkout

我有几个星期前做过的旧提交。我想从该提交中仅恢复单个文件。我该怎么办?

4 个答案:

答案 0 :(得分:188)

git checkout 'master@{7 days ago}' -- path/to/file.txt

这不会改变HEAD,它只会覆盖本地文件path/to/file.txt

请参阅man git-rev-parse了解可能的修订规范(当然,简单的哈希(如dd9bacb)会做得很好)

不要忘记提交更改(审核后......)

答案 1 :(得分:75)

  1. 通过git checkout [Revision_Key] -- path/to/file
  2. 查看旧提交中的文件
  3. 根据需要添加,提交,推送。

答案 2 :(得分:5)

我需要恢复最近提交给git的文件。 因此,只需重申并提供另一个视角,您需要通过执行以下两个步骤来执行此操作:

  1. git log -3
    这显示了最近的三个提交。阅读评论和作者姓名,以便缩小所需的确切版本。 记下你想要的提交版本的长提交ID(即b6b94f2c19c456336d60b9409fb1e373036d3d71)。

  2. git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71 - myfile.java
    传递提交ID和要还原的文件名。确保双连字符前后有空格。

  3. 还有很多其他方法可以做到这一点。但这个是我能记住的更简单的一个。希望有所帮助。

    注意:如果您在项目路径/文件夹中,则无需在结帐命令中键入完整文件的路径。

答案 3 :(得分:2)

所有答案都提到git checkout <tree-ish> -- <pathspec>。从git v2.23.0开始,有一个新的git restore方法应该假定git checkout负责的一部分。请查看github blog上的更改要点。

此命令的默认行为是恢复工作树的状态,其内容来自source参数(在您的情况下为提交哈希)。

假设提交哈希为abcdef,该命令将如下所示:

git restore --source=abcdef file_name

(默认情况下)将其放入工作树中。如果您想将更改直接放入索引中以便可以立即提交:

git restore --source=abcdef --worktree --staged file_name

或带有简短的选项名称:

git restore -s=abcdef -W -S file_name