當執行以下命令時,會直接從暫存區刪除文件,工做區則不作出改變java
#直接從暫存區刪除文件,工做區則不作出改變 git rm --cached <file>
執行命令git
經過重寫目錄樹移除add文件:github
#若是已經用add 命令把文件加入stage了,就先須要從stage中撤銷 git reset HEAD <file>...
當執行 「git reset HEAD」 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,可是工做區不受影響。數據庫
示例:把f1.txt文件從暫存區撤回工做區ide
移除全部未跟蹤文件gradle
#移除全部未跟蹤文件 #通常會加上參數-df,-d表示包含目錄,-f表示強制清除。 git clean [options]
示例:ui
移除前:idea
執行移除:spa
移除後:設計
#只從stage中刪除,保留物理文件 git rm --cached readme.txt #不但從stage中刪除,同時刪除物理文件 git rm readme.txt #把a.txt更名爲b.txt git mv a.txt b.txt
當執行提交操做(git commit)時,暫存區的目錄樹寫到版本庫(對象庫)中,master 分支會作相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹。
當執行 「git reset HEAD」 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,可是工做區不受影響。
當執行 「git rm –cached <file>」 命令時,會直接從暫存區刪除文件,工做區則不作出改變。
當執行 「git checkout .」 或者 「git checkout — <file>」 命令時,會用暫存區所有或指定的文件替換工做區的文件。這個操做很危險,會清除工做區中未添加到暫存區的改動。
當執行 「git checkout HEAD .」 或者 「git checkout HEAD <file>」 命令時,會用 HEAD 指向的 master 分支中的所有或者部分文件替換暫存區和以及工做區中的文件。這個命令也是極具危險性的,由於不但會清除工做區中未提交的改動,也會清除暫存區中未提交的改 動。
git diff用於顯示WorkSpace中的文件和暫存區文件的差別
用"git status"只能查看對哪些文件作了改動,若是要看改動了什麼,能夠用:
#查看文件修改後的差別 git diff [files]
命令:
---a表示修改以前的文件,+++b表示修改後的文件
#比較暫存區的文件與以前已經提交過的文件 git diff --cached
也能夠把WorkSpace中的狀態和repo中的狀態進行diff,命令以下:
#比較repo與工做空間中的文件差別 git diff HEAD~n
若是倉庫中已經存在文件f4.txt,在工做區中對f4修改了,若是想撤銷可使用checkout,簽出覆蓋
檢出命令git checkout是git最經常使用的命令之一,同時也是一個很危險的命令,由於這條命令會重寫工做區
語法:
#用法一 git checkout [-q] [<commit>] [--] <paths>... #用法二 git checkout [<branch>] #用法三 git checkout [-m] [[-b]--orphan] <new_branch>] [<start_point>]
<commit>是可選項,若是省略則至關於從暫存區(index)進行檢出
$ git checkout branch #檢出branch分支。要完成圖中的三個步驟,更新HEAD以指向branch分支,以及用branch 指向的樹更新暫存區和工做區。 $ git checkout #彙總顯示工做區、暫存區與HEAD的差別。 $ git checkout HEAD #同上 $ git checkout -- filename #用暫存區中filename文件來覆蓋工做區中的filename文件。至關於取消自上次執行git add filename以來(若是執行過)的本地修改。 $ git checkout branch -- filename #維持HEAD的指向不變。用branch所指向的提交中filename替換暫存區和工做區中相 應的文件。注意會將暫存區和工做區中的filename文件直接覆蓋。 $ git checkout -- . 或寫做 git checkout . #注意git checkout 命令後的參數爲一個點(「.」)。這條命令最危險!會取消全部本地的 #修改(相對於暫存區)。至關於用暫存區的全部文件直接覆蓋本地文件,不給用戶任何確認的機會! $ git checkout commit_id -- file_name #若是不加commit_id,那麼git checkout -- file_name 表示恢復文件到本地版本庫中最新的狀態。
示例:
有些時候咱們不想把某些文件歸入版本控制中,好比數據庫文件,臨時文件,設計文件等
在主目錄下創建".gitignore"文件,此文件有以下規則:
如:
#爲註釋 *.txt #忽略全部 .txt結尾的文件 !lib.txt #但lib.txt除外 /temp #僅忽略項目根目錄下的TODO文件,不包括其它目錄temp build/ #忽略build/目錄下的全部文件 doc/*.txt #會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
示例:
建立一個.gitignore文件忽視全部的日誌文件
查看狀態:
從上圖中能夠看出2個日誌文件並無添加到暫存區,直接被忽視了。
針對各類語言與項目的Git忽視文件: https://github.com/kaedei/gitignore https://github.com/github/gitignore
通用的java忽視文件:
# Compiled class file *.class # Log file *.log # BlueJ files *.ctxt # Mobile Tools for Java (J2ME) .mtj.tmp/ # Package Files # *.jar *.war *.ear *.zip *.tar.gz *.rar # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid*
通用的Visual Studio開發項目忽視文件:
idea忽視文件: