有时候有一些冗余数据在你的工程里积累,你必须清理它们。让我们看看Git怎么做到这个。


一种是使用git rm命令,另外一种是使用add命令。这样可以让文件消失。如果你只有一个文件想要删除,那么git rm命令就是你想要的。

$ git rm file1.txt

它真正的从文件系统中删除了文件,并且它会暂存这个文件已经被删除的事实

$ git status

如果你提交了,这个文件不会从之前的历史中消失

$ git commit -m"Remove file1.txt"

但或从未来的提交中消失


如果你像我一样,是一个命令行爱好者,你可能会忘了git这个环节,只是简单的输入rm文件名,然后你会注意到git发现文件已经消失

$ rm file2.txt

$ git status

告诉你改变还没有被暂存

你可以同样使用git rm命令来暂存它,就像之前一样

$ git rm file2.txt

$ git status

它并不在意文件已经不存在了,但是它暂存了删除已经发生的事实




在一个实际的清除场景中,你可能会有许多文件要删除,你不太可能从命令行中来做这些事,你可能会用一些其它的工具,比如Finder或者Windows Explorer或者一些其它工具。状态告诉你,这些被删除的文件已经消失了。

$ git status

但是你不想单独删除它们

如果你在做这样的清除工作,你可以使用add命令,

$ git add -u .

$ git status

他会遍历你的工作树,寻找git之前已经识别到的文件,现在要消失的文件,它会把它们作为新的删除来暂存。你会注意到我这里输入了一个点,作为文件名字。那只是一个意味着当前工作目录的简写。

当add命令看到它的时候,他会从你当前所在的目录,递归到最深处,寻找它能够添加的所有文件,或者说,在这个场景下,所有能够被删除的文件。


最后,你可能想删除一个文件,不想从文件系统中真正删除它,换个说法,你想告诉git不再跟踪这个文件,但是把它保留在工作树中,这可能是一种情况,你意外地提交了一个文件,你并不想让它成为历史的一部分,你可以使用git rm --cached去实现它,

$ git rm --cached

$ git status

它暂存了删除,但是,如你所看,它在那里保存了文件。

现在,在你的工作树中,作为一个不被追踪的文件

现在这个技巧带来了其它的问题,比如,如果你不想这个文件成为历史的一部分,你需要返回到之前的提交中去清除它?这是另外一个视频的主题。


或者,如果你想文件不被追踪,但你想要确定在你将来某个时候你不会偶然的添加它,也有方法,比如使用git ignore file去保证,这将是另外一堂课的主题。


现在。桌面的客户端去处理这些怎么样?答案是真的很简单。


如果你在Finder中删除一个文件,然后切换到mac到Github客户端,你可以看到,它会马上识别到哪些被删除的文件,准备好为你暂存那些删除,你知道,这些表示后面,有很多东西在运行,Git让删除文件的操作变得非常简单,祝你在清理之旅中好运。