在Git中清理未分阶段删除文件的简便方法

时间:2012-06-06 12:45:51

标签: git

我经常使用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 个答案:

答案 0 :(得分:44)

如果我正确理解了您的问题,您希望提交删除内容...也就是说,您希望对显示为的所有文件的所有执行等效的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

此时提交将做正确的事。

答案 1 :(得分:3)

我通常会提交我更改过的文件。

如果我删除了冗余文件,我会在此之后执行以下操作:

git commit -a -m 'deleted redundant files'

答案 2 :(得分:1)

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