Git Clean:移除未追蹤的檔案,保持儲存庫清爽

在處理 Git 存儲庫時,積累未跟踪的文件和目錄是很常見的,這些文件和目錄不是存儲庫版本控制系統的一部分。這些可能包括臨時文件、構建產物或其他本地創建的未提交文件。隨著時間的推移,這些文件可能使工作目錄變得混亂,使其更難保持乾淨和有組織的工作區。

為了解決這個問題,Git 提供了 git clean 命令,用於刪除未跟踪的文件和目錄。在本指南中,我將向您展示如何安全地使用 git clean,其不同選項以及避免意外刪除文件的最佳實踐,同時保持 Git 存儲庫整潔。為了進一步學習,我建議參加我們的 Git 基礎GitHub 概念介紹 課程,了解版本控制以及 Git 和 GitHub 之間的區別。

了解 git clean

git clean 命令是 Git 中一個有用的工具,用於從工作目錄中刪除未被追蹤的文件。 當您需要將工作目錄重置為原始狀態時,例如在切換分支之前或運行生成臨時文件的構建過程後,git clean 命令就很有用。 然而,應該謹慎使用 git clean 命令,因為它會永久刪除未被追蹤的文件和目錄,而不是將它們移動到垃圾桶或回收站中。

git resetgit checkout 不同,它們修改被追蹤的文件,git clean 嚴格處理未受版本控制的文件和目錄。這包括:

  • 構建過程生成的臨時文件

  • 日誌文件或緩存數據

  • .gitignore 中列出的文件(如果使用 -x 明確指定)

git clean 命令對於維護整潔的工作目錄很有用,它與其他 Git 命令如 git resetgit checkout 一起管理已追蹤文件的變更。

我發現 完整的 Git Cheat Sheet 是一個方便的參考指南,包含常見的 Git 命令。

git clean 的常見用途

git clean 命令是一個有用的工具,用於維護乾淨的工作目錄。以下是一些常見的使用情況,可以安全地刪除不必要的文件和目錄。

刪除未追蹤的文件

在 Git 存儲庫中工作時,未追蹤的文件可能會隨著時間的推移而累積。以下選項有助於刪除它們:

  • git clean -f: 強制刪除未追蹤的文件。

  • git clean -fd: 刪除未追蹤的文件和未追蹤的目錄。

  • git clean -fx: 刪除未追蹤和被忽略的文件,如 .gitignore 中列出的文件。

然而,在使用-fx选项时,您应当小心,因为它也会删除被忽略的文件。在执行命令之前,始终使用干跑(git clean -n)进行验证。

交互模式

使用git clean -i命令可以启用交互模式,允许用户有选择地删除未跟踪的文件。当您希望更多地控制要删除哪些文件或目录时,这种模式非常有用。

假设您正在一个项目中工作,在该项目中您已经保存了Olympics文件夹中的更改。然而,您已经添加了名为2024_Data2025_Data的新数据源。如果运行git clean -i命令,您将收到提示,允许您从以下选项中选择删除未跟踪的更改。

  • clean:删除选定的文件

  • filter:指定要清理的文件的模式

  • select:按编号选择单个文件

  • quit:退出而不刪除任何內容

git clean -i 互動模式。圖片由作者提供。

安全起見的模擬執行

使用 git clean -n 選項是一個有用的安全措施,因為它執行一個”模擬執行”,顯示將被刪除的未追蹤文件和目錄清單,而不會實際刪除它們。這使您可以在執行之前檢查更改。

在下面的示例中,git clean -n 命令列出應該刪除的文件,但不刪除它們。

git clean -n 用於模擬執行。圖片由作者提供。

結合 git reset

要完全重置 Git 工作目錄,您可以結合使用 git reset 和 git clean,其中:

  • git reset --hard:將跟蹤文件重置為最後提交的狀態,丟棄任何本地更改。

  • git clean -fd:刪除未追蹤的文件和目錄,僅留下已提交的文件。

這組合確保完全乾淨的工作目錄,當切換分支、撤銷實驗性更改或準備進行全新開始時很有用。

查看或參考 Git Pull Force: How to Overwrite a Local Branch With Remote 教程,學習覆蓋本地更改的最佳實踐。

使用 git clean 的逐步指南

按照以下步驟安全地清理您的 Git 存儲庫並刪除不需要的未追蹤文件和目錄。

步驟 1:檢查當前狀態

在清理之前,運行 git status 檢查存儲庫的當前狀態,看看哪些文件是未追蹤的。

git status

運行 git status 檢查存儲庫的當前狀態。圖片由作者提供。

步驟 2:預覽將要刪除的內容

在執行任何刪除命令之前,使用 git clean -n 預覽將要刪除的內容。

git clean -n

運行 git clean -n 預覽即將刪除的項目。圖片由作者提供。

步驟 3:刪除未追蹤的文件

如果預覽結果正確,運行 git clean -f 刪除未追蹤的文件。

git clean -f

使用 git clean -f 刪除未追蹤的更改。圖片由作者提供。

步驟 4:刪除未追蹤的目錄

使用 git clean -fd 刪除未追蹤的目錄。

git clean -fd

使用 git clean -fd 移除未追蹤的目錄。圖源:作者。

步驟 5:移除被忽略的檔案

要移除未追蹤和被忽略的檔案,使用 git clean -fx 命令。

git clean -fx

步驟 6:使用互動模式進行選擇性清理

為了獲得更多控制,考慮使用 git clean -i 進行互動式移除。此模式允許您逐個選擇要刪除的檔案。

Git clean -i

git clean -i 互動模式進行選擇性清理。圖源:作者。

git clean 與其他 Git 命令的比較

git clean 命令常與其他修改或重置檔案的 Git 命令進行比較。下表突顯了主要差異:

Command Function
git clean 永久移除未追蹤的檔案和目錄。
git reset 將追蹤的檔案重置為先前狀態,影響暫存和已提交的變更。
git checkout(或 git restore 放棄追蹤檔案中的變更,但不會移除它們。
git stash 暫時保存追蹤和未追蹤的變更,以便日後使用。

Git Clean 最佳實踐

要安全有效地使用git clean,請遵循以下最佳做法:

  • 在刪除之前使用乾跑(-n):始終使用git clean -n選項執行乾跑,然後再執行git clean。這可讓您預覽將被刪除的文件,而不會實際刪除它們。

  • 請注意被忽略的文件:在使用git clean時,要小心使用-x選項,這會刪除被忽略的文件。這可能會刪除.gitignore中列出的重要配置文件。如果需要刪除被忽略的文件,請使用git clean -fx命令。

  • 與 Git Reset 結合進行完整清理: 要完全重設您的存儲庫,請將 git resetgit clean 結合在一起,其中 git reset --hard 會將已追蹤的文件還原到它們的最後提交狀態,而 git clean -fd 會刪除未追蹤的文件和目錄。

  • 使用互動模式(-i)進行更安全的刪除:不要盲目刪除文件,請使用互動模式(git clean -i)來查看並選擇要刪除的文件。

潛在風險和預防措施

如果不小心使用git clean,可能會帶來風險,因為它會永久刪除文件而不存儲它們。以下是一些需要考慮的關鍵風險和預防措施:

  • 檔案被永久刪除:與暫時保存更改的git stash不同,git clean會永久刪除未被追蹤的檔案和目錄。一旦刪除,這些檔案將無法通過 Git 恢復。如果您稍後可能需要這些檔案,請在運行git clean命令之前考慮將其存儲或備份。

  • 謹慎使用 -x 選項:使用git clean-fx會刪除被忽略的檔案,這些檔案可能包括列在.gitignore中的重要配置檔案或像node_modules/venv/這樣的依賴快取。意外刪除這些檔案可能會破壞構建或開發環境,因此只有在必要時才使用這個選項。

  • 先運行試跑:在執行 git clean -f 前,請始終使用 git clean -n 進行試跑。這個步驟讓您可以預覽將被刪除的檔案,幫助您避免意外刪除重要檔案

  • 替代方法:在某些情況下,使用 git stash 可能比 git clean 更好。 git stash -u 命令會儲存未追蹤的檔案,排除被忽略的檔案以便稍後恢復,而 git stash pop 則在需要時恢復已儲存的更改。這種方法在您需要切換分支或整理工作區時很有用,而不會永久遺失更改。

結論

一個維護良好的程式庫展現了對細節、效率和負責任地管理數位資產的重視。雇主們尋找了解最佳實踐的開發人員,如在刪除文件之前使用git clean -n,謹慎處理被忽略的文件使用-x,並使用更安全的替代方案如git stash

參加DataCamp課程不僅是學習的好方法,也是向雇主表明你認真對待軟體開發的好方法。因此,我建議閱讀所有級別的前20個Git面試問題和答案部落格文章,並參加我們的新Git基礎知識技能課程,成為Git專家。

Source:
https://www.datacamp.com/tutorial/git-clean