Git本地有四個工做區域:工做目錄(Working Directory)、暫存區(Stage/Index)、資源庫(Repository或Git Directory)、git倉庫(Remote Directory)。文件在這四個區域之間的轉換關係以下:html
Workspace: 工做區,就是你平時存放項目代碼的地方git
Index / Stage: 暫存區,用於臨時存放你的改動,事實上它只是一個文件,保存即將提交到文件列表信息算法
Repository: 倉庫區(或版本庫),就是安全存放數據的位置,這裏面有你提交到全部版本的數據。其中HEAD指向最新放入倉庫的版本安全
Remote: 遠程倉庫,託管代碼的服務器,能夠簡單的認爲是你項目組中的一臺電腦用於遠程數據交換服務器
git的工做流程通常是這樣的:post
1、在工做目錄中添加、修改文件;url
2、將須要進行版本管理的文件放入暫存區域;spa
3、將暫存區域的文件提交到git倉庫。版本控制
所以,git管理的文件有三種狀態:已修改(modified),已暫存(staged),已提交(committed)code
版本控制就是對文件的版本控制,要對文件進行修改、提交等操做,首先要知道文件當前在什麼狀態,否則可能會提交了如今還不想提交的文件,或者要提交的文件沒提交上。
GIT不關心文件兩個版本之間的具體差異,而是關心文件的總體是否有改變,若文件被改變,在添加提交時就生成文件新版本的快照,而判斷文件總體是否改變的方法就是用
SHA-1算法計算文件的校驗和。
Untracked: 未跟蹤, 此文件在文件夾中, 但並無加入到git庫, 不參與版本控制. 經過git add 狀態變爲Staged.
Unmodify: 文件已經入庫, 未修改, 即版本庫中的文件快照內容與文件夾中徹底一致. 這種類型的文件有兩種去處, 若是它被修改, 而變爲Modified.
若是使用git rm移出版本庫, 則成爲Untracked文件
Modified: 文件已修改, 僅僅是修改, 並無進行其餘的操做. 這個文件也有兩個去處, 經過git add可進入暫存staged狀態, 使用git checkout 則丟棄修改過,
返回到unmodify狀態, 這個git checkout即從庫中取出文件, 覆蓋當前修改
Staged: 暫存狀態. 執行git commit則將修改同步到庫中, 這時庫中的文件和本地文件又變爲一致, 文件爲Unmodify狀態. 執行git reset HEAD filename取消暫存,
文件狀態爲Modified
下面的圖很好的解釋了這四種狀態的轉變:
新建文件--->Untracked
使用add命令將新建的文件加入到暫存區--->Staged
使用commit命令將暫存區的文件提交到本地倉庫--->Unmodified
若是對Unmodified狀態的文件進行修改---> modified
若是對Unmodified狀態的文件進行remove操做--->Untracked
# 在當前目錄新建一個Git代碼庫 git init # 新建一個目錄,將其初始化爲Git代碼庫 git init [project-name] # 下載一個項目和它的整個代碼歷史 git clone [url]
#查看指定文件狀態 git status [filename] #查看全部文件狀態 git status
# 添加指定文件到暫存區 git add [file1] [file2] ... # 添加指定目錄到暫存區,包括子目錄 git add [dir] # 添加當前目錄的全部文件到暫存區 git add . #當咱們須要刪除暫存區或分支上的文件, 同時工做區也不須要這個文件了, 可使用(⚠️) git rm file_path #當咱們須要刪除暫存區或分支上的文件, 但本地又須要使用, 這個時候直接push那邊這個文件就沒有,若是push以前從新add那麼仍是會有。 git rm --cached file_path #直接加文件名 從暫存區將文件恢復到工做區,若是工做區已經有該文件,則會選擇覆蓋 #加了【分支名】 +文件名 則表示從分支名爲所寫的分支名中拉取文件 並覆蓋工做區裏的文件 git checkout
#將暫存區-->資源庫(版本庫) git commit -m '該次提交說明' #若是出現:將沒必要要的文件commit 或者 上次提交以爲是錯的 或者 不想改變暫存區內容,只是想調整提交的信息 #移除沒必要要的添加到暫存區的文件 git reset HEAD 文件名 #去掉上一次的提交(會直接變成add以前狀態) git reset HEAD^ #去掉上一次的提交(變成add以後,commit以前狀態) git reset --soft HEAD^
# 取回遠程倉庫的變化,並與本地分支合併 git pull # 上傳本地指定分支到遠程倉庫 git push
# 顯示當前的Git配置 git config --list # 編輯Git配置文件 git config -e [--global] #初次commit以前,須要配置用戶郵箱及用戶名,使用如下命令: git config --global user.email "you@example.com" git config --global user.name "Your Name" #調出Git的幫助文檔 git --help #查看某個具體命令的幫助文檔 git +命令 --help #查看git的版本 git --version
我只是偶爾安靜下來,對過去的種種思忖一番。那些曾經的舊時光裏即使有過天真愚鈍,也不值得譴責。畢竟,日後的日子,還很長。不斷鼓勵本身,
天一亮,又是嶄新的起點,又是未知的征程(上校18)