在 Git 中,术语 rm 代表删除。它被用来删除单个文件或一个文件集合。git rm 的主要功能是将跟踪的文件从 Git 索引中移除。此外,它还可以用来从工作目录和暂存索引中删除文件。
被删除的文件必须是该分支要删除的理想文件。在索引中不能有对其内容的更新。否则,删除过程可能会很复杂,有时甚至不会发生。但它可以通过 -f 选项强制进行。
让我们通过一个例子来理解它。
git rm 命令
git rm命令用来删除工作树和索引中的文件。
如果我们想从我们的版本库中删除该文件。那么它可以通过git rm命令来完成。让我们拿一个文件,比如 newfile.txt 来测试 rm 命令。git rm 命令的操作方式是。
$ git rm <file Name>
上述命令将从 Git 和仓库中删除该文件。git rm 命令不仅将文件从仓库中删除,也将从暂存区中删除。如果我们检查仓库的状态,那么它将显示为已删除。请看下面的输出。
在上面的输出中,文件newfile.txt已经从版本控制系统中删除。所以仓库和状态都显示为删除。如果我们只使用 rm 命令,那么它不会永久地从 Git 中删除该文件。它可以在暂存区被追踪到。请看下面的输出。
在上面的输出中,newfile2.txt文件已经被删除。但是当我们检查版本库的状态时,我们可以在暂存区跟踪这个文件。这意味着 newfile2 还没有从暂存区删除,而且它在版本库中也是可用的。我们可以通过提交来使它回到版本控制系统中。要提交这个文件,首先要把它添加到索引中,然后再提交。要在索引中添加这个文件,请运行下面的命令。
$ git add newfile2.txt
上述命令将把该文件添加到索引中。要提交它,请运行下面的命令。
$ git commit -m "commit message."
它将提交该文件并使其可用于版本控制系统。请看下面的输出。
在上面的输出中,我们正在从暂存区检索文件到我们的目录。newfile2.txt被重新添加到我们的版本库中。
Git Rm Cached
有时你想从 Git 上删除文件,但又想把文件保留在你的本地仓库。换句话说,你不想在 Git 上分享你的文件。Git 允许你这样做。在这种情况下,可以使用缓存选项。它指定删除操作只作用于暂存索引,而不是仓库。带缓存选项的git rm命令将被用作。
$ git rm --cached <file name>
上面的命令将从版本控制系统中删除一个文件。被删除的文件将保留在版本库中。这个命令在某种程度上就像 rm 命令一样。让我们通过一个例子来理解它。
假设我们想从Git上删除一个文件,以newfile1.txt为例,要删除这个文件,使用下面的命令。
$ git rm --cached newfile1.txt
上述命令将从版本控制系统中删除该文件,但它仍然可以在版本库中被跟踪。它也可以被重新添加到版本控制系统中。要检查文件的状态,可以使用 status 命令,如。
$ git status
考虑下面的输出。
从上面的输出中我们可以看到,newfile1.txt 文件已经从版本控制系统中删除了,但它在版本库中可以被跟踪。这个文件在版本控制系统中是作为一个未被跟踪的文件存在的。我们可以通过提交来跟踪它。
撤销Git Rm 命令
git rm 命令的执行不是永久性的,执行后可以恢复。这些修改在版本库有新的提交之前是不能持久的。我们可以撤消git rm命令。有几种方法可以做到这一点。最通常和直接的方法是git reset命令。git reset 命令的使用方法如下。
$ git reset HEAD
或者我们也可以使用。
$ git reset --hard
上述命令将重置头部的位置。这样,它就会得到它刚刚的前一个点的位置。考虑一下下面的输出。
从上面的输出中,我们可以看到,文件已经成功地被重置到之前的位置。
还有一种方法可以撤销git rm命令。我们也可以通过 git checkout 命令来做。签出有同样的效果,从HEAD中恢复一个文件的最新版本。它的使用方法如下。
$ git checkout.
Git Rm 命令的限制
git rm只对当前分支进行操作。删除过程只适用于工作目录和暂存索引树。在创建新的提交之前,它不会在版本库历史中持续存在。