我有一个几周前做的旧承诺。我只想从该提交中恢复一个文件。我该怎么办?
当前回答
我需要恢复一个最近提交到git的文件。 重申一下,从另一个角度来看,你需要执行以下两个步骤:
Git log -3 这显示了最近的三次提交。阅读评论和作者的名字,这样你就可以缩小你想要的确切版本。 写下你想要的提交版本的长提交ID(例如b6b94f2c19c456336d60b9409fb1e373036d3d71)。 Git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71——myfile.java 传递提交ID和要恢复的文件名。确保双连字符前后有空格。
还有很多其他的方法,但这是我能记住的最简单的方法。
注意:如果您在项目路径/文件夹中,则不需要在签出命令中输入完整的文件路径。
其他回答
git checkout 'master@{7 days ago}' -- path/to/file.txt
这不会改变HEAD,它只会覆盖本地文件路径/到/file.txt
请参阅man git-rev-parse以获得可能的修订规范(当然,一个简单的散列(如dd9bacb)就可以了)
不要忘记提交变更(在审核之后…)
通过git checkout [Revision_Key]——path/to/file检出旧提交的文件。 适当地添加、提交、推送。
所有答案都提到git checkout <tree ish>—<pathspec>。从git v2.23.0开始,有了一个新的git恢复方法,它应该承担git检出所负责的部分内容。在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和要恢复的文件名。确保双连字符前后有空格。
还有很多其他的方法,但这是我能记住的最简单的方法。
注意:如果您在项目路径/文件夹中,则不需要在签出命令中输入完整的文件路径。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别