如何在我的工作副本中排除非指数的变更?


当前回答

如果您只是想删除现有文件的更改,请使用支票(文档在这里)。

git checkout -- .

没有分支是指定的,所以它检查了当前分支. 双希芬(--)告诉Git,接下来的应该作为其第二个论点(路),你错过了一个分支的规格。

如果您想要从您的最后订单中删除添加的文件,请使用清洁(文档在这里):

git clean -i 

选项 -i 启动一个互动清洁,以防止错误的删除。 还有许多其他选项可用于更快的执行; 查看文档。

如果您想将更改转移到持有空间以获得后续访问,请使用 stash (在这里文档):

git stash

所有更改将转移到 Git 的 Stash,以便随后访问。 有几个选项可用于更色彩的 Stash; 查看文档。

其他回答

如果您想恢复未完成的文件,请使用 git restore --staged。

如果几乎不可能删除文件的修改,你是否考虑忽略它们? 如果这个声明是正确的,并且你不会在开发过程中触摸这些文件,这个命令可能有用:

git update-index --assume-unchanged 文件_to_ignore

git clean -df

清理工作树,重复删除不受版本控制的文件,从当前目录开始。

D:除了未追踪的文件之外,还可以删除未追踪的目录

-f: 力量(可能不需要根据 clean.requireForce 设置)

Run git help clean 查看手册

下面实际上只是一个解决方案,如果你正在与一个存储库的福克工作,在那里你经常同步(例如拖请求)与另一个复制。

我有一个类似的问题,也许不是相同的,我很遗憾地说我的解决方案不是理想的,但它最终是有效的。

我会经常有 git 状态消息如下(包含至少 2/4 文件):

$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2var.dats
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2Var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2Var.dats

一个激动人心的眼睛会注意到,这些文件有双重的,这是一个单一的字母的情况下. 某种方式,我不知道什么导致我下这个路径开始(因为我没有工作这些文件自己从上流的repo),我已经转换了这些文件. 试试这个页面上列出的许多解决方案(和其他页面)似乎没有帮助。

看起来完整的解决方案是:

git clean -df
git checkout -- .

警告:虽然它不会删除在.gitignore 中直接提到的无视文件,但 git clean -df 可能会删除在文件夹中居住的无视文件。

git clean 删除所有未跟踪的文件, git checkout 清除所有未跟踪的更改。