git命令——git rmgit mv
Posted kelamoyujuzhen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git命令——git rmgit mv相关的知识,希望对你有一定的参考价值。
git rm
删除的本质
在git中删除一个文件,本质上是从tracked files中移除对这些文件的跟踪。更具体地说,就是将这些文件从staging area移除。然后commit。
作用
git rm的作用就是将文件从暂存区删除
git rm的作用就是将文件从工作目录 和 暂存区 删除。
git rm并不能仅仅删除工作目录中的文件,而暂存区保持不变。目前git也没有提供任何参数支持这一功能。要想实现这一目标,只能使用Linux自带的/bin/rm命令
使用场景
彻底删除文件
所谓彻底删除文件,就是在工作目录和暂存区删除文件。由于gir rm不能直接删除工作目录中的文件,于是使用/bin/rm手动删除。此时执行git status 时就会在 “Changes not staged for commit”部分看到,表示没有被更改没有被暂存
$ rm PROJECTS.md $ git status On branch master Your branch is up-to-date with ‘origin/master‘. Changes not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in workingdirectory) deleted: PROJECTS.md no changes added to commit (use "git add" and/or "git commit -a")
然后再运行 git rm 将文件从暂存区移除
$ git rm PROJECTS.md rm ‘PROJECTS.md‘ $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) deleted: PROJECTS.md
下一次提交时,该文件就不再纳入版本管理了。
现在假设这样一组场景,有文件file1.c,file2.c,file3.c。我把file1.c做了修改,并且git add到暂存区。这时候如果向上面那样手动/bin/rm删除file1.c,然后再git rm file1.c,这样没有任何问题。但是如果你跳过/bin/rm file1.c这一步,直接git rm file1.c是不被允许的,报错
$ git rm file1.c error: the following file has changes staged in the index: file1.c (use --cached to keep the file, or -f to force removal)
必须要用强制删除选项 -f(即 force 的首字母)。 这是一种安全特性,用于防止误删还没有添加到快照的数据,这样的数据不能被 Git 恢复。
只删除暂存区的文件
如果你想保留工作目录中的文件,但是删除对应暂存区中的文件。换句话说,你想让这些保存在磁盘上的文件不再被git跟踪。请使用--cached 选项。为啥会有这种奇怪的需求呢?假设这样一种场景,你忘记了添加.gitignore文件,不小心把很多本应忽略的文件加到了暂存区,这时候就需要这里介绍的做法了。
$ git rm --cached README
git rm 命令后面可以列出文件或者目录的名字,也可以使用 glob 模式。 比方说:
$ git rm log/*.log
注意到星号 * 之前的反斜杠 , 因为 Git 有它自己的文件模式扩展匹配方式,所以我们不用 shell 来帮忙展开。
此命令删除 log/ 目录下扩展名为 .log 的所有文件。 类似的比如:
$ git rm *~
该命令为删除以 ~ 结尾的所有文件。
以上是关于git命令——git rmgit mv的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程
VSCode自定义代码片段15——git命令操作一个完整流程
git 命令 git status add rm commit mv