我正在尝试从我的本地分支恢复暂存的已删除文件。我尝试了git checkout文件名,但它没有用。我不想使用重置硬盘,因为它会重置我对其他文件所做的所有必要更改。那么有没有办法只恢复已删除的文件?
答案 0 :(得分:0)
有几种方法可以做到这一点。 git reset <filename>
应仅重置单个文件。
您也可以执行git show HEAD:<filename>
并将输出保存回 filename ,然后再将git add
重新保存。
答案 1 :(得分:0)
让我们先重述一下这个问题。
鉴于此git status
的输出:
$ git status
On branch SOMEBRANCH
Your branch is up-to-date with ...
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: SOMEFILE
您现在希望将文件SOMEFILE
恢复到工作树和索引中,以便git status
输出不说deleted: SOMEFILE
。
git status
给出如果您遵循git status
本身打印的建议:
$ git reset HEAD SOMEFILE
状态将变为:
$ git status
On branch SOMEBRANCH
Your branch is up-to-date with ...
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: SOMEFILE
现在你必须在git status
中再次提出建议:
$ git checkout -- SOMEFILE
方法1上方的文字是快捷方式的关键。我们希望将文件SOMEFILE
从HEAD
提交复制到索引中,然后将文件SOMEFILE
从索引复制到工作树中。有一个命令可以执行此操作:它是git checkout
:
$ git checkout HEAD -- SOMEFILE
诀窍是当你说git checkout -- SOMEFILE
时,你告诉Git将文件仅从索引复制到工作树。
这就是为什么按照git status
建议的方式执行它需要两个步骤:第一步git reset HEAD SOMEFILE
将文件从HEAD
提交复制到索引。第二步git checkout -- SOMEFILE
将文件从索引复制到工作树。使用git checkout HEAD -- SOMEFILE
语法,我们将Git从HEAD
复制到索引,然后从索引到工作树,所有这些都使用一个命令。
(但git status
给出的建议也有效。)