git 移除檔案 取消對檔案的跟蹤

2021-10-08 12:01:14 字數 1795 閱讀 8386

要從 git 中移除某個檔案,就必須要從已跟蹤檔案清單中移除(確切地說,是從暫存區域移除),然後提交。可以用git rm命令完成此項工作,並連帶從工作目錄中刪除指定的檔案,這樣以後就不會出現在未跟蹤檔案清單中了。

如果只是簡單地從工作目錄中手工刪除檔案,執行git status時就會在 「changes not staged for commit」 部分(也就是未暫存清單)看到:

$ rm grit.gemspec

$ git status

on branch 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: grit.gemspec

no changes added to commit (use "git add" and/or "git commit -a")

然後再執行 git rm 記錄此次移除檔案的操作:

$ git rm grit.gemspec

rm 'grit.gemspec'

$ git status

on branch master

changes to be committed:

(use "git reset head ..." to unstage)

deleted: grit.gemspec

最後提交的時候,該檔案就不再納入版本管理了。如果刪除之前修改過並且已經放到暫存區域的話,則必須要用強制刪除選項-f(譯註:即 force 的首字母),以防誤刪除檔案後丟失修改的內容

另外一種情況是,我們想把檔案從 git 倉庫中刪除(亦即從暫存區域移除),但仍然希望保留在當前工作目錄中。換句話說,僅是從跟蹤清單中刪除。比如一些大型日誌檔案或者一堆.a編譯檔案,不小心納入倉庫後,要移除跟蹤但不刪除檔案,以便稍後在.gitignore檔案中補上,用--cached選項即可:

$ git rm --cached readme.txt
後面可以列出檔案或者目錄的名字,也可以使用 glob 模式。比方說:

$ git rm log/\*.log
注意到星號*之前的反斜槓\,因為 git 有它自己的檔案模式擴充套件匹配方式,所以我們不用 shell 來幫忙展開(譯註:實際上不加反斜槓也可以執行,只不過按照 shell 擴充套件的話,僅僅刪除指定目錄下的檔案而不會遞迴匹配。上面的例子本來就指定了目錄,所以效果等同,但下面的例子就會用遞迴方式匹配,所以必須加反斜槓。)。此命令刪除所有log/目錄下擴充套件名為.log的檔案。類似的比如:

$ git rm \*~
會遞迴刪除當前目錄及其子目錄中所有~結尾的檔案。

取消對檔案的跟蹤還有乙個命令:git update-index --assume-unchanged 《取消跟蹤的檔案》

注:該命令只能取消提交到暫存區之前的檔案,可以先用git reset 《檔名》將暫存區的檔案回退到暫存區之前,然後再取消跟蹤。

git 移除檔案以及取消對檔案的跟蹤

要從 git 中移除某個檔案,就必須要從已跟蹤檔案清單中移除 確切地說,是從暫存區域移除 然後提交。可以用git rm命令完成此項工作,並連帶從工作目錄中刪除指定的檔案,這樣以後就不會出現在未跟蹤檔案清單中了。如果只是簡單地從工作目錄中手工刪除檔案,執行git status時就會在 changes ...

git取消檔案跟蹤

在使用git的時候,有些檔案是不需要上傳的,所以就可以修改 gitignore 例如 如果是對所有檔案都取消跟蹤的話,就是 git rm r cached 不刪除本地檔案 git rm r f 刪除本地檔案 對某個檔案取消跟蹤 git rm cached readme1.txt 刪除readme1....

git 取消檔案跟蹤 git 取消原有檔案索引

本地所有檔案 git rm cached readme1.txt 刪除readme1.txt的跟蹤,並保留在本地。git rm f readme1.txt 刪除readme1.txt的跟蹤,並且刪除本地檔案。資料夾 如果是對所有檔案都取消跟蹤的話,就是 git rm r cached 不刪除本地檔案...