git checkout -- file-name 只是放弃工作空间中的修改,把暂存区的文件恢复到工作空间。但是,一旦暂存区并没有这个文件的话,你就不能用git checkout -- file-name这个命令恢复文件。
比如使用 git rm file-name的话,文件就会同在从暂存区和工作空间删除,此时文件只在HEAD指向的分支上存在了,此时若要恢复文件,那么应用使用历史提交的某一个版本来恢复。
git checkout 95d73498bb39d6c6101bf45337498fa1c37c8ad7 file-name
95d73498bb39d6c6101bf45337498fa1c37c8ad7 是commit的历史。也可以用HEAD代替,直接恢复最新版。
再比如使用rm file-name的话,此时文件只是从工作空间删除了,并不会影响暂存区,和分支上的内容,此时你可以用 git ls-files -d 查看删除的文件,git ls-files --cache查看暂存区的文件,这时候就可以用
git checkout file-name 恢复文件了。