一 git簡介
1. 概念
git 是一種分布式版本管理工具押蚤。
git 支持的平臺(tái):
2. git與svn的區(qū)別
(1)git是分布式的,而SVN是集中式的筒扒。Git是沒有中心服務(wù)器的可柿,每個(gè)人機(jī)器上都是一個(gè)完整的庫鸠踪,我們平時(shí)開發(fā)代碼時(shí)的中央服務(wù)器其實(shí)和我們自己機(jī)器上的庫內(nèi)容是完全一樣的。
(2)git把內(nèi)容按元數(shù)據(jù)方式存儲(chǔ)复斥,而svn是按文件:因?yàn)間it目錄是處于個(gè)人git目錄是處于個(gè)人機(jī)器上的一個(gè)克隆版的版本庫营密,它擁有中心版本庫上所有的東西,例如標(biāo)簽目锭,分支评汰,版本記錄等。?
(3)GIT分支和SVN的分支不同:svn會(huì)發(fā)生分支遺漏的情況痢虹,而git可以同一個(gè)工作目錄下快速的在幾個(gè)分支間切換被去,很容易發(fā)現(xiàn)未被合并的分支,簡單而快捷的合并這些文件奖唯。
(4)GIT沒有一個(gè)全局的版本號(hào)惨缆,而SVN有
(5)GIT的內(nèi)容完整性要優(yōu)于SVN:GIT的內(nèi)容存儲(chǔ)使用的是SHA-1哈希算法。這能確保代碼內(nèi)容的完整性丰捷,確保在遇到磁盤故障和網(wǎng)絡(luò)問題時(shí)降低對(duì)版本庫的破壞坯墨。
參考鏈接:https://jingyan.baidu.com/article/676629976401a154d51b8430.html
二 git的下載和安裝
1. 下載地址
https://git-scm.com/downloads(注意下載的版本的位數(shù)與自己電腦一樣)
2. 安裝
雙擊.exe安裝程序,按默認(rèn)選項(xiàng)完成安裝病往。
安裝完成后捣染,在開始菜單里找到“Git”->“Git Bash”,蹦出一個(gè)類似命令行窗口的東西停巷,就說明Git安裝成功耍攘!此時(shí)右擊鼠標(biāo),發(fā)現(xiàn)多了幾個(gè)選項(xiàng)畔勤,如圖所示蕾各。
注意運(yùn)行g(shù)it bash的方式,
(1)直接在桌面右擊鼠標(biāo)選擇git bash硼被,使用cd命令切換至倉庫所在位置。(也可更改git bash的默認(rèn)路徑)
(2)先在本地磁盤上建好倉庫渗磅,在倉庫所在的位置右擊鼠標(biāo)嚷硫,執(zhí)行操作即可。
三 git的基本使用
1.創(chuàng)建版本庫
(1)初始化一個(gè)倉庫:git init
完成這個(gè)步驟后始鱼,會(huì)在本地倉庫中生成一個(gè).git文件夾仔掸。(注意:若未看到.git,可使用ls -a命令查看隱藏文件医清,或設(shè)置windows顯示隱藏文件及文件夾)
(2)添加文件到git倉庫起暮,分兩步:先git add,后git commit会烙。
(2-1)可能遇到的問題:在commit文件時(shí)需要驗(yàn)證個(gè)人信息负懦,出現(xiàn)如下圖的提示消息:please tell me who you are. 這時(shí)需要我們按照提示運(yùn)行命令筒捺,完成用戶名和郵箱的配置,之后就可以正常commit文件了纸厉。
(2-2)注意事項(xiàng):
? a.使用git add 命令需要指明具體add哪個(gè)文件系吭,git add .代表將倉庫中所有待添加的文件都添加進(jìn)來。
? b.無論新增還是修改文件颗品,想要將提交文件到本地倉庫都需要add和commit兩個(gè)步驟肯尺;
?? c.? commit-m中的m(message)是本次提交的說明躯枢;
2.文件狀態(tài)變化
下面就用具體的示例來模擬這些狀態(tài)的變化则吟。
1、首先在本地倉庫所在文件夾新建一個(gè)文件(如:git_file.txt)锄蹂。
2氓仲、使用git status查看倉庫當(dāng)前狀態(tài)
3、按照提示信息添加文件git_file.txt败匹,并查詢狀態(tài)
4掀亩、commit文件舔哪,并查詢狀態(tài)
對(duì)應(yīng)為文件標(biāo)識(shí)為:
4槽棍、修改文件git_file.txt捉蚤,并查看文件狀態(tài)。
5炼七、使用git diff 查看具體的修改內(nèi)容缆巧。
6、再次修改文件并查詢具體修改內(nèi)容豌拙。
7查看日志git log(注意:信息量大時(shí),可以使用git log --pretty=oneline 來簡化輸出按傅。)
說明:
(1)git log 清晰地展示了提交的版本號(hào)(commit id)捉超、描述信息(description)、提交者(Author)及提交時(shí)間(Date,精確到秒s)唯绍。
(2)HEAD -> master表名當(dāng)前所處的分支為master
(3)你看到的commit后面跟著個(gè)一大串是commit id(版本號(hào))拼岳,它是使用SHA-1計(jì)算出來的用十六進(jìn)制表示的數(shù)。
3.git版本回退與‘前進(jìn)’
可以回退到上一個(gè)版本的前置條件况芒,就是你還沒有把自己的本地版本庫推送到遠(yuǎn)程Oе健!!
(1)版本回退
結(jié)合上小節(jié)git log中的圖對(duì)比著看耐版。
在Git中祠够,用HEAD表示當(dāng)前版本,也就是最新的提交64c44c4(它是截取了commit id的前七位)椭更,上一個(gè)版本就是HEAD^哪审,上上一個(gè)版本就是HEAD^^。(感覺版本回退就是指針位置的變動(dòng))
說明:目前我們的git_file.txt共有兩個(gè)版本虑瀑,第一個(gè)為空文件湿滓。當(dāng)我們使用reset命令回退至第一個(gè)版本時(shí),查看倉庫中文件git_file.txt中的內(nèi)容也變?yōu)榈谝话娴牧松喙贰4藭r(shí)我們繼續(xù)回退版本叽奥,就會(huì)發(fā)現(xiàn)文件git_file在倉庫中消失了。(雖然文件git_file只有兩個(gè)版本痛侍,但是這個(gè)關(guān)注的是倉庫的版本哦3ァ)
(2)版本‘前進(jìn)’
注意查看此時(shí)的倉庫狀態(tài)為 文件git_file為unstaged狀態(tài),而不是staged主届。(不理解赵哲??君丁?是不是這時(shí)提交的話枫夺,就不用先git add了,直接git commit 就是ok 了绘闷?)
4橡庞、撤銷修改與刪除文件
(1)撤銷修改的命令 git checkout? --? <filename>,適用于以下兩種情況:
a.自修改后還沒有被放到暫存區(qū),現(xiàn)在印蔗,撤銷修改就回到和版本庫一模一樣的狀態(tài)扒最;
b.已經(jīng)添加到暫存區(qū)后,而且又作了修改华嘹,現(xiàn)在吧趣,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)。
說明:使用時(shí)注意:--前后都需要加空格耙厚。
(2)刪除文件
git checkout其實(shí)是用版本庫里的版本替換工作區(qū)的版本,無論工作區(qū)是修改還是刪除颜曾,都可以“一鍵還原”纠拔。
版本回退秉剑、撤銷修改 都要注意應(yīng)用場景小結(jié):
場景1:當(dāng)你改亂了工作區(qū)某個(gè)文件的內(nèi)容泛豪,想直接丟棄工作區(qū)的修改時(shí),用命令git checkout -- file。:
場景2:當(dāng)你不但改亂了工作區(qū)某個(gè)文件的內(nèi)容诡曙,還添加到了暫存區(qū)時(shí)臀叙,想丟棄修改,分兩步价卤,第一步用命令git reset HEAD file劝萤,就回到了場景1,第二步按場景1操作慎璧。
場景3:已經(jīng)提交了不合適的修改到版本庫時(shí)床嫌,想要撤銷本次提交,參考版本回退一節(jié)胸私,不過前提是沒有推送到遠(yuǎn)程庫厌处。
四. git工作流程
Workspace :即work directory /working tree,工作目錄
Index/Stage:暫存區(qū)(Staging area)
Repository:本地倉庫
Remote:遠(yuǎn)程倉庫
五.使用git將項(xiàng)目上傳到github
1.進(jìn)入Github首頁岁疼,點(diǎn)擊New repository新建一個(gè)項(xiàng)目
2.填寫相應(yīng)信息后點(diǎn)擊create即可
3.點(diǎn)擊Clone or dowload會(huì)出現(xiàn)一個(gè)地址阔涉,copy這個(gè)地址備用
4.接下來就到本地操作了,首先右鍵你的項(xiàng)目捷绒,選擇Git Bash Here進(jìn)入如下界面瑰排,在本地創(chuàng)建ssh key。(錯(cuò)誤示例)
$ ssh-keygen -t rsa -C"your_email@youremail.com
新生成的公鑰和密鑰文件如圖所示:
4.接下來就到本地操作了,首先右鍵你的項(xiàng)目挖息,選擇Git Bash Here金拒,進(jìn)入如下界面。(正確示例)
5.接下來就要把github上面的倉庫克隆到本地 .完成后你的本地項(xiàng)目文件夾下面就會(huì)多出個(gè)名為‘你github上面的項(xiàng)目名’的文件夾,如圖我多出了個(gè)git_work_2文件夾电禀,我們把本地項(xiàng)目文件夾下的所有文件(除了新多出的那個(gè)文件夾不用)幢码,其余都復(fù)制到那個(gè)新多出的文件夾下,接著繼續(xù)輸入命令 cd git_work_2,進(jìn)入該文件夾
8.接下來依次輸入以下代碼即可完成其他剩余操作:
9.上傳成功后症副,如下圖所示店雅。
方法
git checkout其實(shí)是用版本庫里的版本替換工作區(qū)的版本,無論工作區(qū)是修改還是刪除贞铣,都可以“一鍵還原”闹啦。
六、分支管理
1辕坝、分支簡介
1-1 分支分類及常用分支
1-2 git是保存數(shù)據(jù)的方式
有些傳統(tǒng)的版本管理軟件窍奋,分支操作實(shí)際上會(huì)生成一份現(xiàn)有代碼的物理拷貝,而Git只生成一個(gè)指向當(dāng)前版本(又稱"快照")的指針酱畅,因此非沉瞻溃快捷易用。
在進(jìn)行提交操作時(shí)纺酸,Git 會(huì)保存一個(gè)提交對(duì)象(commit object)挚歧。該提交對(duì)象會(huì)包含一個(gè)指向暫存內(nèi)容快照的指針。還包含了作者的姓名和郵箱吁峻、提交時(shí)輸入的信息以及指向它的父對(duì)象的指針滑负。首次提交產(chǎn)生的提交對(duì)象沒有父對(duì)象,普通提交操作產(chǎn)生的提交對(duì)象有一個(gè)父對(duì)象用含,而由多個(gè)分支合并產(chǎn)生的提交對(duì)象有多個(gè)父對(duì)象矮慕。
2、案例說明
2-1.案例準(zhǔn)備:新建一個(gè)版本庫啄骇,并創(chuàng)建一個(gè)開發(fā)分支痴鳄。
上圖可見,第一行顯示了當(dāng)前項(xiàng)目所有分支缸夹,HEAD -> develop-1表明當(dāng)前所處分支為develop-1痪寻。
推薦參考網(wǎng)址:
git 分支管理 http://blog.codingplayboy.com/2017/04/06/git_branch/
官方文檔 https://git-scm.com/docs