我有一个几周前做的旧提交。我只想从该提交中恢复一个文件。我该怎么办?
git checkout 'master@{7 days ago}' -- path/to/file.txt
这不会改变 HEAD,它只会覆盖本地文件 path/to/file.txt
有关可能的修订规范,请参见 man git-rev-parse(当然,简单的散列(如 dd9bacb
)会很好)
不要忘记提交更改(在审核后...)
通过 git checkout [Revision_Key] -- path/to/file 从旧提交中签出文件。酌情添加、提交、推送。
git checkout
可以处理单个文件(参见sehe的回答),无需复制和粘贴。
HEAD
、ORIG_HEAD
或任何与 ^
/~
/@
结合的东西风格的符号。
所有答案都提到 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 -sabcdef -W -S file_name
我需要恢复最近提交到 git 的文件。因此,重申一下并给出另一个观点,您需要通过运行以下两个步骤来做到这一点:
git log -3 这显示了三个最近的提交。阅读评论和作者姓名,以便缩小您想要的确切版本。为您想要的提交版本写下那个长提交 ID(例如 b6b94f2c19c456336d60b9409fb1e373036d3d71)。 git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71 -- myfile.java 传递提交 ID 和要恢复的文件名。确保双连字符前后都有空格。
还有很多其他方法可以做到这一点,但这是我能记住的最简单的一种。
注意:如果您位于项目路径/文件夹中,则无需在 checkout 命令中键入完整文件的路径。
不定期副业成功案例分享
revision-specification
的“复杂”示例,因为这是 OP 所要求的:)shacommit~1
(例如:git checkout 0f4bbdcd~1 -- path/to/file.txt
)即可在之前立即获取该提交。