git - 移除文件以及取消對文件的跟蹤


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

如果只是簡單地從工作目錄中手工刪除文件,運行 git status 時就會在 “Changes not staged for commit” 部分(也就是未暫存清單)看到:

  1.  
    $ rm grit.gemspec
  2.  
    $ git status
  3.  
    On branch master
  4.  
    Changes not staged for commit:
  5.  
    ( use "git add/rm <file>..." to update what will be committed)
  6.  
    ( use "git checkout -- <file>..." to discard changes in working directory)
  7.  
     
  8.  
    deleted: grit.gemspec
  9.  
     
  10.  
    no changes added to commit (use "git add" and/or "git commit -a")

然后再運行 git rm 記錄此次移除文件的操作:

  1.  
    $ git rm grit.gemspec
  2.  
    rm 'grit.gemspec'
  3.  
    $ git status
  4.  
    On branch master
  5.  
    Changes to be committed:
  6.  
    (use "git reset HEAD <file>..." to unstage)
  7.  
     
  8.  
    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 <文件名>將暫存區的文件回退到暫存區之前,然后再取消跟蹤。

--------------------- 本文來自 leedaning 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/leedaning/article/details/44976319?utm_source=copy 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM