要從 git 中移除某個檔案,就必須要從已跟蹤檔案清單中移除(確切地說,是從暫存區域移除),然後提交。 可以用git 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 ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
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 ..." to unstage)
deleted: projects.md
下一次提交時,該檔案就不再納入版本管理了。 如果刪除之前修改過並且已經放到暫存區域的話,則必須要用強制刪除選項-f
(譯註:即 force 的首字母)。 這是一種安全特性,用於防止誤刪還沒有新增到快照的資料,這樣的資料不能被 git 恢復。
另外一種情況是,我們想把檔案從 git 倉庫中刪除(亦即從暫存區域移除),但仍然希望保留在當前工作目錄中。 換句話說,你想讓檔案保留在磁碟,但是並不想讓 git 繼續跟蹤。 當你忘記新增.gitignore
檔案,不小心把乙個很大的日誌檔案或一堆.a
這樣的編譯生成檔案新增到暫存區時,這一做法尤其有用。 為達到這一目的,使用--cached
選項:
$ git rm --cached readme
git rm
命令後面可以列出檔案或者目錄的名字,也可以使用glob
模式。 比方說:
$ git rm log/\*.log
注意到星號*
之前的反斜槓\
, 因為 git 有它自己的檔案模式擴充套件匹配方式,所以我們不用 shell 來幫忙展開("*" 對 shell 來說,有很多的涵義,在按下 enter 鍵時"*"可能會被展開成為別的字元,因為git有自己的匹配方式,所以這裡使用反斜槓\來把它轉意成普通字元,以免在git開始匹配之前*被展開成了其他字元
)。 此命令刪除log/
目錄下擴充套件名為.log
的所有檔案。 類似的比如:
$ git rm \*~
該命令為刪除以~
結尾的所有檔案。
7 移除元素
給定乙個陣列 nums 和乙個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。示例 1 給定 nums 3,2,2,3 ...
7 移除元素
題 給定乙個陣列 nums 和乙個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。示例 1 給定 nums 3,2,2,...
7 移除元素
給定乙個陣列 nums 和乙個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。示例 1 給定 nums 3,2,2,3 ...