基本概念
我們先來理解下 Git 工作區(qū)、暫存區(qū)和版本庫概念:
工作區(qū):就是你在電腦里能看到的目錄蝴罪。
暫存區(qū):英文叫 stage 或 index。一般存放在?.git?目錄下的 index 文件(.git/index)中步清,所以我們把暫存區(qū)有時也叫作索引(index)要门。
版本庫:工作區(qū)有一個隱藏目錄?.git,這個不算工作區(qū)廓啊,而是 Git 的版本庫欢搜。
下面這個圖展示了工作區(qū)、版本庫中的暫存區(qū)和版本庫之間的關系:
圖中左側(cè)為工作區(qū)谴轮,右側(cè)為版本庫狂巢。在版本庫中標記為 "index" 的區(qū)域是暫存區(qū)(stage/index),標記為 "master" 的是 master 分支所代表的目錄樹书聚。
圖中我們可以看出此時 "HEAD" 實際是指向 master 分支的一個"游標"唧领。所以圖示的命令中出現(xiàn) HEAD 的地方可以用 master 來替換。
圖中的 objects 標識的區(qū)域為 Git 的對象庫雌续,實際位于 ".git/objects" 目錄下斩个,里面包含了創(chuàng)建的各種對象及內(nèi)容。
當對工作區(qū)修改(或新增)的文件執(zhí)行?git add?命令時驯杜,暫存區(qū)的目錄樹被更新受啥,同時工作區(qū)修改(或新增)的文件內(nèi)容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區(qū)的文件索引中鸽心。
當執(zhí)行提交操作(git commit)時滚局,暫存區(qū)的目錄樹寫到版本庫(對象庫)中,master 分支會做相應的更新顽频。即 master 指向的目錄樹就是提交時暫存區(qū)的目錄樹藤肢。
當執(zhí)行?git reset HEAD?命令時,暫存區(qū)的目錄樹會被重寫糯景,被 master 分支指向的目錄樹所替換嘁圈,但是工作區(qū)不受影響。
當執(zhí)行?git rm --cached <file>?命令時蟀淮,會直接從暫存區(qū)刪除文件最住,工作區(qū)則不做出改變。
當執(zhí)行?git checkout .?或者?git checkout -- <file>?命令時怠惶,會用暫存區(qū)全部或指定的文件替換工作區(qū)的文件涨缚。這個操作很危險,會清除工作區(qū)中未添加到暫存區(qū)中的改動策治。
當執(zhí)行?git checkout HEAD .?或者?git checkout HEAD <file>?命令時脓魏,會用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區(qū)和以及工作區(qū)中的文件。這個命令也是極具危險性的览妖,因為不但會清除工作區(qū)中未提交的改動轧拄,也會清除暫存區(qū)中未提交的改動。
Git 基本操作
Git 的工作就是創(chuàng)建和保存你項目的快照及與之后的快照進行對比讽膏。
本章將對有關創(chuàng)建與提交你的項目快照的命令作介紹檩电。
Git 常用的是以下 6 個命令:git clone、git push府树、git add?俐末、git commit、git checkout奄侠、git pull卓箫,后面我們會詳細介紹。
說明:
workspace:工作區(qū)
staging area:暫存區(qū)/緩存區(qū)
local repository:版本庫或本地倉庫
remote repository:遠程倉庫
一個簡單的操作步驟:
git init - 初始化倉庫垄潮。
git add . - 添加文件到暫存區(qū)烹卒。
git commit - 將暫存區(qū)內(nèi)容添加到倉庫中闷盔。
創(chuàng)建倉庫命令
命令?? ?說明
git init?? ?初始化倉庫
git clone?? ?拷貝一份遠程倉庫,也就是下載一個項目旅急。
提交與修改
Git 的工作就是創(chuàng)建和保存你的項目的快照及與之后的快照進行對比逢勾。
下表列出了有關創(chuàng)建與提交你的項目的快照的命令:
命令?? ?說明
git add?? ?添加文件到暫存區(qū)
git status?? ?查看倉庫當前的狀態(tài),顯示有變更的文件藐吮。
git diff?? ?比較文件的不同溺拱,即暫存區(qū)和工作區(qū)的差異。
git commit?? ?提交暫存區(qū)到本地倉庫谣辞。
git reset?? ?回退版本迫摔。
git rm?? ?將文件從暫存區(qū)和工作區(qū)中刪除。
git mv?? ?移動或重命名工作區(qū)文件泥从。
提交日志
命令?? ?說明
git log?? ?查看歷史提交記錄
git blame ?? ?以列表形式查看指定文件的歷史修改記錄
遠程操作
命令?? ?說明
git remote?? ?遠程倉庫操作
git fetch?? ?從遠程獲取代碼庫
git pull?? ?下載遠程代碼并合并
git push?? ?上傳遠程代碼并合并
大家快來一起學習 GIT 分布式版本控制系統(tǒng)句占,缺乏機器練手的小伙伴可以去 cnaaa 看一看!