Git 各场景下的文件删除
起初,我还没理解 Git “ 一般只添加数据” 的设计思想,直到深入学习Git的文件删除并实践后,才摸着一些门道,特此记录。
1. 已修改,未暂存,未提交:第一次创建
对应Git中的操作如下:
即Untracked files。这类文件由于没有被Git跟踪,所以直接命令行rm或文件夹手动删除即可。正因为没有被Git跟踪,如果使用git rm,就会报错:fatal: pathspec ‘test’ did not match any files
2. 已修改,已暂存,未提交:准备第一次提交
对应Git中的操作如下:
即Changes to be committed,即将提交。此时如果rm:
看起来没什么问题,但status显示还是有新文件test待提交,说明test只是在当前工作目录下不可见,无法再修改,但还在暂存区。下面的commit也验证了这一点
此时的test,已经进入到了暂存区,但又并未被Git所跟踪。对于这类文件,Git给予了高度重视,因为一旦删除它,就意味着后面再也无法通过查看历史提交记录来恢复。所以如果一定要删除,必须加上强制删除选项 -f,用于防止误删还没有提交过的数据。即git rm -f
3. 已修改,已暂存,已提交,未修改:第一次提交
对应Git中的操作如下:
由于test1刚被提交,所以Git已经有了跟踪记录。由于提交后还未修改,所以只需要执行git rm,即可删除。这里所谓的删除,指的是下次提交的版本中,没有test1文件了,想要找回test1,还是可以通过历史提交记录找回的。看到这里,想必可以理解Git “一般只添加数据” 的设计思想了doge。
4. 多次提交,已修改/已暂存:已有记录,有新修改
这是最后一种场景,与场景三不同的是,这里有新的修改,意味着:虽然仓库已有记录,但很可能需要更新。所以Git也给予了一定程度的重视,对于这类文件的删除,有两种方案:
- 先执行rm,后执行git rm
- 直接执行git rm -f
以 多次提交,已修改,先执行rm,后执行git rm 为例: