在git中取消显示已删除的文件

在git中取消显示已删除的文件,git,git-checkout,Git,Git Checkout,通常,要放弃对文件的更改,您需要执行以下操作: git checkout -- <file> git签出-- 如果要放弃的更改是删除文件,该怎么办?上面的行将给出一个错误: error: pathspec '<file>' did not match any file(s) known to git. 错误:pathspec“”与git已知的任何文件都不匹配。 什么命令可以在不撤消其他更改的情况下恢复单个文件 奖励点:另外,如果我要放弃的更改是添加文件,该怎么办?

通常,要放弃对文件的更改,您需要执行以下操作:

git checkout -- <file>
git签出--
如果要放弃的更改是删除文件,该怎么办?上面的行将给出一个错误:

error: pathspec '<file>' did not match any file(s) known to git.
错误:pathspec“”与git已知的任何文件都不匹配。
什么命令可以在不撤消其他更改的情况下恢复单个文件


奖励点:另外,如果我要放弃的更改是添加文件,该怎么办?我也想知道如何取消显示更改。

这两个问题都在
git status
中得到了回答

要取消添加新文件的stage,请使用
git rm--cached filename.ext

# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   test
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    test

另一方面,
git checkout--
永远不会取消stage,它只会丢弃未分段的更改。

您的两个问题的答案是相关的。我将从第二个开始:

暂存文件后(通常使用
git add
,尽管其他一些命令也隐式地暂存更改,如
git rm
),您可以使用
git reset--
撤消该更改


在您的情况下,您必须使用
git rm
删除该文件,这相当于使用
rm
删除该文件,然后转移该更改。如果您首先使用
git reset--
将其解压,然后可以使用
git checkout--

将其恢复,前提是您希望撤消
git rm
rm
的效果,然后是
git add-A
或类似的功能:

# this restores the file status in the index
git reset -- <file>
# then check out a copy from the index
git checkout -- <file>
#这将恢复索引中的文件状态
git重置--
#然后从索引中签出一份副本
git签出--

若要撤消git add,假设您尚未提交,则上面的第一行就足够了。

如果已暂存并提交,则以下操作将重置文件:

git reset COMMIT_HASH file_path
git checkout COMMIT_HASH file_path
git add file_path
这将适用于以前几次提交时发生的删除操作。

从开始,您还有另一个选项:


git restore--staged--

我尝试了上述解决方案,但仍然有困难。我有其他文件,其中有两个文件被意外删除

要撤消两个已删除的文件,我必须取消所有文件的分级:

git reset HEAD .
此时,我能够签出已删除的项目:

git checkout -- WorkingFolder/FileName.ext
最后,我能够重新设置其余文件并继续提交。

从手动页面

git-reset - Reset current HEAD to the specified state
git reset [-q] [<tree-ish>] [--] <paths>...
In the first and second form, copy entries from <tree-ish> to the index.

放弃更改和取消老化是两件不同的事情,你想做什么?这是一篇文章中两个不同的问题。这使得答案太多,不必要地令人困惑。我没有看到Debian上git 1.7.2.5中删除文件的提示。很高兴看到
git status
被引用;向用户展示了一种现在和下次自助的方式,以防在未来的git版本中添加或更新信息。这是错误的。“要提交的更改”是您在重置git之前看到的内容。在git重置之后,您会看到“已更改但未更新”,这在git作者的母语中显然意味着“未进行更改”。更重要的是,关于“git状态告诉你你所知道的一切”的整个教条都是谎言。(那些说这是浪费人们时间的经理应该被解雇。)
--
是关键
git reset
不起作用,这就是我来这里的原因。为什么只有在删除文件的情况下才需要
end of options marker
?@handsv这不是严格要求的(你可以交替地做
git reset HEAD
,这是等效的),但是,
git reset
将选项标记的
end
之前的第一个参数视为引用名,而不是文件名。能不能写得更灵活一点?可能为什么不是呢?可能只有开发人员才能确定。@twalberg
git reset filename
对未删除的文件很有效。@NeerajB。手册页面的概要说明是
git reset[-q][-]…
。如果
参数与
的名称(分支或
头或标记或…)匹配,则如果不使用
--
,它将执行与您可能想到的不同的操作。这就是它存在的原因。
git revert COMMIT\u HASH
fatal: ambiguous argument 'some-deleted-file-path': unknown revision or path not in the working tree.