【发布时间】:2011-03-11 07:58:42
【问题描述】:
当我运行git status 时,我有一堆表单行
deleted: dir/file.js
我可以使用git checkout -- dir/file.js 单独删除其中的每一个,但必须有一种不那么费力的方法。 (是的,我知道我应该首先使用git rm...)
[更新:正如 Mark 在下面指出的那样,git checkout -- 实际上恢复了一个已删除的文件,而我认为它从 git 索引中删除了它。我有点困惑,因为当你运行git status 时,它会说:
use "git checkout -- <file>..." to discard changes in working directory
对我来说,“放弃更改”并不意味着“恢复您删除的文件”,但在 git 术语中我认为这是有道理的。]
【问题讨论】:
-
我不明白。
checkout将恢复这些已删除的文件,但您说您应该首先使用git rm来删除这些文件。您要将这些文件恢复到您的工作树还是从索引和工作树中删除它们? -
我也想将它们从索引中删除,这是
git checkout -- [filename]所做的,而git checkout [filename]会恢复文件。 -
这不对,我担心 -
git checkout -- <filename>中的--只是一种确保<filename>被解释为路径而不是分支名称(或标签或提交)。如果<filename>不是分支的名称(&c.),那么您提到的两种形式都具有相同的效果:它们将文件恢复到索引中的状态。 -
啊,哎呀!谢谢你的更正,马克。
-
“放弃更改”的意思是“撤消我在工作目录中所做的事情”。您正在丢弃自上次提交状态以来所做的更改。删除文件是一种更改,ergo checkout 将通过恢复文件来丢弃该更改。
标签: git