Git:通过checkout提交ID重新获取已删除的未跟踪文件
解决Git切换提交后无法恢复已删除文件的问题
这问题我碰到过好几次,其实核心原因是:当你已经处于目标提交的HEAD上时,git checkout <commitID> 不会主动覆盖工作区的修改(包括你手动删除文件的操作),Git会直接提示你“Already on 'xxxx'”,自然不会把文件恢复回来。给你几个靠谱的解决办法:
方法一:用
git restore精准恢复文件
这是最推荐的方式,既能指定恢复单个/多个文件,也不会影响其他未提交的修改。命令格式如下:# 恢复单个文件 git restore --source=你的CommitID -- 路径/文件名 # 恢复该提交下所有被删除的文件(注意最后的点号) git restore --source=你的CommitID .这个命令会直接从目标提交中拉取指定文件,覆盖工作区的删除状态。
方法二:先切换到其他分支再切回目标提交
如果你不想记复杂的参数,这个笨办法也很有效:先切换回master分支(或其他任意分支),再重新切回目标提交,Git会重新构建工作区,自动把缺失的文件补回来:git checkout master git checkout 你的CommitID注意切换分支前如果有未提交的修改,要么提交要么暂存,避免Git报错。
方法三:用
git reset强制重置工作区
这个方法会把工作区和暂存区完全重置为目标提交的状态,适合你确定工作区没有需要保留的未提交修改的情况:git reset --hard 你的CommitID⚠️ 注意:
--hard参数会清除所有未提交的修改,使用前一定要确认工作区没有需要保留的内容!
内容的提问来源于stack exchange,提问作者us2956
相关产品推荐
相关产品推荐

