Git中清理未暂存的已删除文件的简单方法

46

通常我会使用我的IDE或通过命令行(而不是使用git mv)移动git存储库中的文件。

结果,我最终会得到几个未提交的要删除的文件,如下所示:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   test.html
#
# 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:    css/bootstrap.css
#   deleted:    css/bootstrap.min.css
#   deleted:    img/glyphicons-halflings-white.png
#   deleted:    img/glyphicons-halflings.png
#   deleted:    js/bootstrap.js
#   deleted:    js/bootstrap.min.js

我通常会选择所有已删除的文件,并在文本编辑器中编辑它们,得到如下内容:

git rm  css/bootstrap.css
git rm  css/bootstrap.min.css
git rm  img/glyphicons-halflings-white.png
git rm  img/glyphicons-halflings.png
git rm  js/bootstrap.js
git rm  js/bootstrap.min.js
我然后将其返回到控制台。是否有一种方法可以避免复制/粘贴?
3个回答

82
如果我理解您的问题正确,您想提交您的删除操作,也就是说,您想要执行git rm命令以删除所有显示为已删除的文件。使用git clean命令将无法实现此目的。
您可以运行git add -u命令:

只匹配索引中已跟踪的文件而不是工作树中的文件。这意味着它永远不会添加新文件,但会添加已跟踪文件的修改后内容,并且如果工作树中对应的文件已被删除,则会从索引中删除文件。

这将捕捉所有已跟踪文件的更改,包括删除操作。因此,如果您从以下状态开始:
# 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:    file2
#   deleted:    file3
#   deleted:    file4
#   deleted:    file5

执行 git add -u 命令将会得到以下结果:

# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    file2
#   deleted:    file3
#   deleted:    file4
#   deleted:    file5

在这一点上进行提交将会做正确的事情。


“git add -A” 对这个也适用吗? - Lucas Pottersky
你好,你说:“此时提交将会做正确的事情。”但是在我的情况下,它显示错误: 提交失败并出现以下错误: 0个文件被提交,4个文件未能提交:提交已删除的文件 无法索引文件web/bundles/app 更新文件失败。 - Zain Elabidine
1
嗨@ZainElabidine。你可能需要打开一个新问题,因为为了弄清楚正在发生的事情,我需要看到你正在运行的确切命令和各个时刻 git status 的输出(而注释确实不是用于这个的好地方)。 - larsks

5

git add -u会更新已跟踪文件的状态。


4

通常我会对我所修改的文件进行提交。

如果我删除了不必要的文件,那么在此之后我会执行以下操作:

git commit -a -m 'deleted redundant files'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接