假设我在commit abc123中删除了abc123。然后,当我git reset时,git diff的输出显示fileA被删除了。fileA已不在我的工作目录中,所以我无法重新添加它。
git reset的默认设置是git reset --mixed。在man git-reset中将此描述为:
重置索引,但不设置工作树(即保留已更改的文件,但未标记为提交),并报告未更新的内容。
什么是优雅的解决方案。解决方法之一是签出包含文件的后一个提交,复制该文件,然后签出abc123并再次添加它。
溶液
以下两个解决方案是正确的。其中一个演示了如何恢复文件,如果您签出删除该文件的提交,并且只运行git checkout fileA。另一个演示了如何恢复当前提交中的文件,即稍后删除fileA的提交。您可以运行git checkout abc123~ -- file A ( --确保checkout命令知道我们试图回滚文件,而不是更改分支)。
发布于 2013-03-13 19:31:00
我想这就是发生的事:
abc123,其中包含fileA。git rm fileA。git reset。现在你看到了这样的东西:
# On branch master
# 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: fileA
#而且您不能使用git add来获取fileA,因为它已经不在文件系统上了。
要恢复fileA,输入:git checkout fileA。
如果索引或工作树中没有您关心的任何其他更改,也可以使用git reset --hard。
发布于 2013-03-13 19:31:05
git reset --hard将重置索引和工作树,这将恢复已删除的文件。如果您只想重新添加一个您知道当前头上存在的已删除的文件,您可以这样做:
git checkout HEAD -- fileA 发布于 2013-03-13 19:36:40
您可以从特定版本签出单个文件:
git checkout abc123~ -- fileA这将签出fileA的版本,因为它存在于提交abc123之前的提交中,因为在提交ID之后使用了倾斜(~)。这将与工作树一起修改索引,所以就好像也添加了文件一样。如果不想这样做,您可以使用git rm --cached fileA将文件从索引中删除,同时将其保留在工作副本中。
https://stackoverflow.com/questions/15394143
复制相似问题