首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使git重新设置已删除的文件

使git重新设置已删除的文件
EN

Stack Overflow用户
提问于 2013-03-13 19:01:05
回答 3查看 595关注 0票数 1

假设我在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命令知道我们试图回滚文件,而不是更改分支)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-13 19:31:00

我想这就是发生的事:

  • 您签出了commit abc123,其中包含fileA
  • 你输入了git rm fileA
  • 你输入了git reset

现在你看到了这样的东西:

代码语言:javascript
复制
# 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

票数 1
EN

Stack Overflow用户

发布于 2013-03-13 19:31:05

git reset --hard将重置索引和工作树,这将恢复已删除的文件。如果您只想重新添加一个您知道当前头上存在的已删除的文件,您可以这样做:

代码语言:javascript
复制
git checkout HEAD -- fileA 
票数 1
EN

Stack Overflow用户

发布于 2013-03-13 19:36:40

您可以从特定版本签出单个文件:

代码语言:javascript
复制
git checkout abc123~ -- fileA

这将签出fileA的版本,因为它存在于提交abc123之前的提交中,因为在提交ID之后使用了倾斜(~)。这将与工作树一起修改索引,所以就好像也添加了文件一样。如果不想这样做,您可以使用git rm --cached fileA将文件从索引中删除,同时将其保留在工作副本中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15394143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档