Git的區域分爲 工作區、暫存區、本地倉庫區
工作區(work directory):一般就是我們項目的根目錄。
本地倉庫(repository):我們在爲項目添加本地庫之後,會在工作區生成一個如下圖所示的隱藏目錄“.git”,.git目錄即爲當前工作區的本地版本庫
暫存區(stage):版本庫中設立一個暫存區(Stage or Index),作爲用來直接跟工作區的文件進行交互,工作區文件的提交或者回滾首選都是通過暫存區,而版本庫中除了暫存區之外,文件的提交的最終存儲位置是分支(Branch),在創建版本庫的時候默認都會有一個主分支(Master)。
- git add files:把當前工作文件拷貝到暫存區域。
- git commit:在暫存區域生成文件快照並提交到本地倉庫。
- git reset – files:用來撤銷最後一次 git add files;
- git reset 撤銷所有暫存區域文件;
- git checkout – files:把文件從暫存區域覆蓋到工作目錄,用來丟棄本地修改。
其中,reset操作是將暫存區內選中的目標文件從暫存區中丟棄,不影響其他任何區域的文件,等同於一個自刷新的動作;
相關命令
- git commit -a 等同於連續執行 git add 與 git commit,即先把文件從工作目錄複製到暫存區,然後再從暫存區複製到倉庫中;
- git checkout HEAD – files 的過程剛好相反,將工作區和暫存區都同步至當前分支內的狀態;也就是最後一次commit的狀態;
- 撤銷操作主要有如下幾種
- git commit --amend 撤銷上一次提交 並講暫存區文件重新提交
- git checkout -- <file> 拉取暫存區文件 並將其替換成工作區文件
- git reset HEAD -- <file> 拉取最近一次提交到版本庫的文件到暫存區 改操作不影響工作區
相關命令
- git diff:查看尚未暫存的文件更新了哪些部分;即當前狀態下工作區和暫存區之間的差異。
- git diff –cached:查看已暫存文件和上次提交時的快照之間的差異;即當前狀態下暫存區和分支內的差異。
- git diff HEAD:查看未暫存文件與最新提交文件快照的區別;即當前狀態下工作區和分支內的差異。
注意:此圖解主要針對已跟蹤狀態文件而言,對於新增文件,有些操作會有問題。
- git add files
- git commit -m
- git commit -am
- 經測試,對已跟蹤的文件可以正確執行,而對於未跟蹤文件(即新增文件)則會出錯
- git reset –soft hash值
- git reset –soft origin/master
- 一般回退到暫存區的文件作排查用,不要直接修改,不然會同時出現在暫存區和未暫存區(其實即使修改了也木有太大關係)
- git reset –mixed hash值
- git reset –mixed origin/master
- 一般回退到未暫存狀態就是爲了進一步的修改
- git reset –hard hash值
- 注意這裏,通常先執行一次fetch,保證本地版本是origin的最新版本,然後再回退。(最厲害的是,這麼操作不會有衝突,直接讓文件變成和origin保持一致)
- git fetch origin
- git reset –hard origin/master
- 特別注意:這麼操作會使你對文件的修改全部消失,還原成最初狀態。
- (針對上一條情況衍生講解)通常在推送到origin時,先要pull,然後再推送,一般是修改提交了的文件和pull下來的同一個文件產生衝突(所以建議修改代碼前,一定先要pull)
- git pull
- git push origin master
- git reset – files
- git rest
- 撤銷所有暫存區的文件
- git checkout – files
- git checkout head – files