最近遇到了一個關於 Git 的小問題:明明編輯了 .gitignore 的內容,卻無法按照新增的規則排除檔案。

上網進行一輪簡單搜尋後,發現問題出在 Git 的快取,因此只需要把 Git 的快取清除並重新加入索引,就能順利套用新的 .gitignore 規則,雖然聽起來有點小複雜(尤其是對我這種習慣用 GUI 管理 Git 的人來說),但是實際上只需要三行指令就能完成上述動作,如果你也遇到了相似的問題,趕緊接著往下看吧!

目錄

  1. 實際步驟
  2. 藉此機會複習 Git

實際步驟

假設你已經開啟終端機軟體,並且已經移動至需要清除快取的 Git 儲存庫目錄。

  1. 清除 Git 快取

    1
    git rm -r --cached .

    這段指令會將 Git 中追蹤的所有檔案從索引中移除,但不會刪除實際的檔案。

  2. 將所有檔案重新加入 Git 追蹤

    1
    git add .
  3. 提交

    1
    git commit -m "重新追蹤所有檔案"
  4. 大功告成!

此時你的 Git 已經刪除快取並重新建立索引,修改過的 .gitignore 也因此得以生效了。

藉此機會複習 Git

雖然照著上述步驟跟著打指令就會成功,但是要有求知精神嘛,尤其是使用終端機指令時,如果沒把自己輸入了什麼搞清楚,總感覺有點不踏實,心裡也會怕怕的,不如把這次的問題當作一個契機,重新複習一下 Git(也順便充點字數)。

在許多 Git 的入門教學裡都會提到,使用 git add <檔案名稱> 來將檔案加入索引,Git 會追蹤被加入索引的檔案,並在這些檔案發生改動時留下記錄。

為求方便,我想大多數人在新建立 Git 儲存庫時,不會一一把需要追蹤的檔案手動加入索引,而是使用 git add . 將目錄內的檔案一口氣加入,但是這麼做有可能會導致一個問題:.gitignore 的改動無法正常作用(也就是我們今天所遇到的問題)。這是因為 .gitignore 不會影響已建立索引的檔案,Git 會繼續追蹤這些檔案,所以我們才需要使用上面提到的指令來清除快取,重新追蹤時,.gitignore 即會生效。