我有一个几周前提交的旧版本。我想只从这次提交中恢复单个文件。我应该怎么做?
我有一个几周前提交的旧版本。我想只从这次提交中恢复单个文件。我应该怎么做?
git checkout 'master@{7 days ago}' -- path/to/file.txt
这不会更改 HEAD,它只会覆盖本地文件path/to/file.txt
请查看git-rev-parse手册,以获取可能的修订说明(当然,一个简单的哈希值(例如 dd9bacb
)也可以很好地完成)
不要忘记提交更改(在审核之后...)
shacommit~1
(例如:git checkout 0f4bbdcd~1 -- path/to/file.txt
)获取该提交之前的提交即可。请注意,这里的“shacommit”是指您要恢复的提交的SHA标识符。 - sdlinsgit checkout [Revision_Key] -- path/to/file
命令从旧的提交中检出文件。git checkout
可以处理单个文件(请参阅 sehe 的答案),无需复制粘贴。 - KoraktorHEAD
、ORIG_HEAD
或任何结合了 ^
/~
/@
-样式注释的内容。 - Alois Mahdal所有答案都提到了 git checkout <tree-ish> -- <pathspec>
。自 git v2.23.0 起,有一个新的 git restore 方法,它被认为是 git checkout
的一部分。请参阅变更的亮点在 github 博客。
这个命令的默认行为是使用来自source
参数的内容还原工作树的状态(在您的情况下将是提交哈希值)。
假设提交哈希值是abcdef
,则该命令应如下所示:
git restore --source=abcdef file_name
默认情况下,更改会放置在工作树中。如果您想直接将更改放入索引中,以便可以立即提交:
git restore --source=abcdef --worktree --staged file_name
或者使用简短选项名称:
git restore -sabcdef -W -S file_name
我需要恢复一个在git中提交的最近文件。
所以为了再次强调并提供另一个视角,你需要通过运行以下两个步骤来完成:
git log -3
这将显示最近的三个提交记录。阅读注释和作者的名称,以缩小你想要的确切版本。
记下你想要的提交版本的长提交ID(例如:b6b94f2c19c456336d60b9409fb1e373036d3d71
)。
git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71 -- myfile.java
传递提交ID和你想要恢复的文件名。确保在双破折号之前和之后有一个空格。
有许多其他方法可以实现此目的,但这是我能记得的最简单的方法。
注意:如果你在项目路径/文件夹内部,则不需要在checkout命令中键入完整的文件路径。