7 移除檔案

2022-03-28 06:37:44 字數 1822 閱讀 2699

要從 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 ...