git clean 和 git rm 的區別和使用場景

git操作中cleanrm是比較容易混淆的兩個操作,本文介紹它們之間的區別及使用場景。

git clean

git clean操作針對的是當前倉庫中未被跟蹤的文件,即未通過git add操作過的文件。

常用操作方式

當我們需要剔除倉庫中誤添加的文件、中間過程生成的文件時,可以這樣做:

# 1. git clean -n 看一下將要刪除的文件是哪些
$ git clean -n ./

# 2. git clean -f 如果確定執行刪除動作
$ git clean -f ./

# 2. 或使用 git clean -i 自己決定要刪除的文件
$ git clean -i ./

上面的命令後面都跟上./,其實這就是當前路徑的意思,但git clean默認情況下的查找就是從當前路徑往下“遞歸”進行的,那爲什麼我們還在這裏畫蛇添足地帶上./呢?實際上,這裏說的“遞歸”是不完整的,因爲它不會對未跟蹤的文件夾進行處理,看下例:

.
├── tracked_file_1
├── tracked_file_2
├── untracked_file_1
├── untracked_dir_1
├── tracked_dir_1
│   ├── tracked_dir_10
│   ├── tracked_dir_11
│   ├── untracked_dir_10
│   │   ├── untracked_file_100

如果在當前頂層目錄直接使用git clean -n查看將要被刪除的文件,會有如下結果:

Would remove untracked_file_1

然後如果直接使用git clean -f對於untracked_dir_1untracked_dir_10untracked_file_100也是無動於衷的,這時就可以像上面那樣在後面跟上路徑,下面是使用git clean -n ./查看將要被刪除的文件的結果:

Would remove untracked_file_1
Would remove untracked_dir_1/
Would remove tracked_dir_1/untracked_dir_10/

確認後使用git clean -f ./就能夠將這些文件/文件夾都刪除了。

實際上,使用git clean -dngit clean -df也能達到一樣的效果,兩種方式可根據喜好選擇其一。

git rm

git rm針對的一定是被跟蹤的文件,它對未被跟蹤的文件束手無策,這是與git clean的本質區別。使用git rm可以將文件從暫存區及版本庫中刪除。

常用場景

1.如果誤將未被跟蹤的文件添加到暫存區,想要撤銷此動作:

# 如果想要保留文件,僅是從暫存區刪除
$ git rm --cached mistake_tracked_file

# 如果想要從暫存區刪除,同時刪除文件
$ git rm -f mistake_tracked_file

2.如果想要刪除已存在版本庫的文件:

$ git rm -f useless_file

這種情況下是能夠直接進行git commit操作的,其實相當於使用了rm命令刪除文件後,再執行了一次git add操作。

總結

可以看到git clean操作其實更像純粹的rm命令,但能夠方便地刪除未跟蹤文件。而git rm操作更像是rm + git add的合集,但其操作的對象是已跟蹤文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章