我有一个几周前做的旧承诺。我只想从该提交中恢复一个文件。我该怎么办?
git checkout 'master@{7 days ago}' -- path/to/file.txt
这不会改变HEAD,它只会覆盖本地文件path/to/file.txt
path/to/file.txt
参见男人git-rev-parse以获得可能的修订规范(当然,一个简单的散列(如dd9bacb)就可以了)
dd9bacb
不要忘记提交变更(在审核之后…)
git checkout [Revision_Key] -- path/to/file
我需要恢复最近提交到git的文件。 因此,为了重申并给出另一种观点,你需要通过运行以下两个步骤来做到这一点:
git log -3
b6b94f2c19c456336d60b9409fb1e373036d3d71
git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71 -- myfile.java
还有很多其他的方法,但这是我能记住的最简单的方法。
注意:如果你在你的项目路径/文件夹中,那么没有必要在签出命令中输入完整的文件路径。
所有答案都提到了git checkout <tree-ish> -- <pathspec>。从git v2.23.0开始,有了一个新的git恢复方法,它应该承担git checkout所负责的部分内容。查看github的博客上更改的重点。
git checkout <tree-ish> -- <pathspec>
git checkout
该命令的默认行为是恢复工作树的状态,其内容来自source参数(在您的情况下将是一个提交哈希)。
source
假设提交哈希值是abcdef,命令看起来像这样:
abcdef
git restore --source=abcdef file_name
它(默认情况下)将其放在工作树中。如果你想把改变直接放在索引中,这样它就可以直接提交:
git restore --source=abcdef --worktree --staged file_name
或者使用较短的选项名称:
git restore -sabcdef -W -S file_name