#### 刪除文件
直接在工作區刪除,對暫存區和版本庫沒有任何影響。本地刪除如果要反映在暫存區中應該用git rm命令,對不想刪除的文件執行git checkout -- <file>,可以讓文件在工作區重現。用git rm命令執行刪除后,刪除動作加入了暫存區,這時執行提交動作就從真正意義上執行了文件刪除,不過文件只是在版本庫的最新提交中被刪除了,在歷史提交中尚在。
$ git add -u ?將本地有改動(包括修改和刪除)的文件標記到暫存區。
#### 恢復刪除的文件
~~~
$ git cat-file -p HEAD^:test.txt > test.txt 從前一提交中恢復test.txt文件
$ git show HEAD^:test.txt > test.txt 效果相同
$ git checkout HEAD^ -- test.txt 也可以
$ git add -A 將工作區的所有改動及新增文件添加到暫存區
~~~
然后執行commit操作,則文件被恢復
#### 移動文件(改名操作)
改名操作相當于對舊文件執行刪除,對新文件執行添加,git mv可以由git rm和git add兩條命令取代
$ git mv oldname newname 完成改名操作
#### 查看版本號
$ git describe 查看當前版本號
git log命令的--decorate參數可以在提交ID的旁邊顯示該提交關聯的引用(里程碑或分支)
#### 選擇性添加文件
$ git add -i可以進入一個交互式界面操作
文件忽略功能
若把編譯的目標文件及其他臨時文件加入版本庫中,浪費存儲空間不說,甚至還會造成沖突。
可以創建一個.gitignore文件,其作用范圍是所處目錄及其子目錄,編輯好要忽略的文件,然后添加到版本庫中。如果不希望添加到庫里,也不希望.gitignore文件帶來干擾,可以在忽略文件中忽略自己。
被忽略以后,只有使用git status命令的--ignore參數,才會在狀態顯示中看到被忽略的文件。添加時git add -A和git add .都失效,只有在添加操作的命令行中明確寫入文件名并提供-f參數才能真正添加。忽略只對未跟蹤文件有效,對于已加入版本庫的文件無效。
文件.gitignore設置的文件忽略是共享式的。之所以被稱為“共享式”,是因為.gitignore被添加到版本庫后成為了版本庫的一部分,當版本庫共享給他人(克隆),或者把版本庫推送(PUSH)到集中式的服務器或他人的版本庫時,這個忽略文件就會在他人的工作區中同樣生效。相對應的是獨享式,有兩種方式:
第一種是針對具體版本庫的,即在版本庫.git目錄下的一個文件.git/info/exclude來設置文件忽略;
另一種是全局的,即通過Git的配置變量core.excludesfile指定的一個忽略文件,其設置的忽略對所有本地版本庫均有效。
如果文件忽略對于所有使用此版本庫工作的人都有益,就通過在版本庫相應目錄下建一個.gitignore文件建立忽略;否則,如果是需要忽略工作區中創建的一個試驗目錄或試驗性的文件,則使用本地忽略。
**忽略語法:**
忽略文件中的空行或以#開始的行會被忽略
可以使用通配符,參見Linux手冊:glob(7)
如果名稱的最前面是一個路徑分割符(/),表明要忽略的文件在此目錄下,而非子目錄的文件
如果名稱的最后面是一個路徑分割符(/),表明要忽略的是整個目錄,同名文件不忽略,否則同名的文件和目錄都忽略
通過在名稱的最前面添加一個感嘆號(!),代表不忽略
#### 文件歸檔
git archive命令,可以對任意提交對應的目錄樹建立歸檔。
~~~
$ git archive -o latest.zip HEAD ?基于最新提交建立歸檔文件latest.zip
$ git archive -o partial.tar HEAD src doc ?只把目錄src和doc建立到歸檔partial.tar中
$ git archive --format=tar --prefix=1.0/ v1.0 | gzip > foo-1.0.tar.gz ?基于里程碑v1.0建立歸檔,并且為歸檔中的文件添加目錄前綴1.0
~~~
在建立歸檔時,如果使用樹對象ID進行歸檔,則使用當前時間作為歸檔中文件的修改時間,而如果使用提交ID或里程碑等,則使用提交建立的時間作為歸檔中文件的修改時間。
如果使用tar格式建立歸檔,并且使用提交ID或里程碑ID,還會把提交ID記錄在歸檔文件的文件頭中。記錄在文件頭中的提交ID可以通過git tar-commit-id命令獲取。
如果希望在建立歸檔時忽略某些文件或目錄,可以通過為相應文件或目錄建立export-ignore屬性加以實現。