? git是目前世界上最先進的分布式版本控制系統(tǒng)。
? Linus在1991年創(chuàng)建了開源的Linux,從此,Linux系統(tǒng)不斷發(fā)展,已經成為大的服務器系統(tǒng)軟件了。Linus雖然創(chuàng)建了Linux,但Linux的壯大是靠全世界熱心的志愿者參與的,這么多人在世界各地為Linux編寫代碼,那Linux的代碼是如何管理的呢?事實是,在2002年以前,世界各地的志愿者把源代碼文件通過diff的方式發(fā)給Linus,然后由Linus本人通過手工方式合并代碼!
? 你也許會想,為什么Linus不把Linux代碼放到版本控制系統(tǒng)里呢?不是有CVS、SVN這些免費的版本控制系統(tǒng)嗎?因為Linus堅定地反對CVS和SVN,這些集中式的版本控制系統(tǒng)不但速度慢,而且必須聯(lián)網才能使用。有一些商用的版本控制系統(tǒng),雖然比CVS、SVN好用,但那是付費的,和Linux的開源精神不符。不過,到了2002年,Linux系統(tǒng)已經發(fā)展了十年了,代碼庫之大讓Linus很難繼續(xù)通過手工方式管理了,社區(qū)的弟兄們也對這種方式表達了強烈不滿,于是Linus選擇了一個商業(yè)的版本控制系統(tǒng)BitKeeper,BitKeeper的東家BitMover公司出于人道主義精神,授權Linux社區(qū)免費使用這個版本控制系統(tǒng)。安定團結的大好局面在2005年就被打破了,原因是Linux社區(qū)牛人聚集,不免沾染了一些梁山好漢的江湖習氣。開發(fā)Samba的Andrew試圖破解BitKeeper的協(xié)議(這么干的其實也不只他一個),被BitMover公司發(fā)現(xiàn)了(監(jiān)控工作做得不錯!),于是BitMover公司怒了,要收回Linux社區(qū)的免費使用權。Linus可以向BitMover公司道個歉,保證以后嚴格管教弟兄們,嗯,這是不可能的。
? 實際情況是這樣的:Linus花了兩周時間自己用C寫了一個分布式版本控制系統(tǒng),這就是Git!一個月之內,Linux系統(tǒng)的源碼已經由Git管理了!牛是怎么定義的呢?大家可以體會一下。Git迅速成為最流行的分布式版本控制系統(tǒng),尤其是2008年,GitHub網站上線了,它為開源項目免費提供Git存儲,無數(shù)開源項目開始遷移至GitHub,包括jQuery,PHP,Ruby等等。歷史就是這么偶然,如果不是當年BitMover公司威脅Linux社區(qū),可能現(xiàn)在我們就沒有免費而超級好用的Git了。
(此種安裝的1.8,版本太老,可以學習用,生成環(huán)境建議用第二種方式):


(3)安裝成功后,運行如下命令:

新建目錄git_test,在git_test目錄下創(chuàng)建一個版本庫,命令:git init

可以看到在git_test目錄下創(chuàng)建了一個.git隱藏目錄,這就是版本庫目錄。
① 在版本庫中創(chuàng)建文件的時候,就有了文件的第一個版本,于此同時會生成一個指針指向這個版本

② 當修改了code.txt中的內容以后,就生成了第二個版本,但是這個版本是依賴上一個版本的,在這個版本中僅僅會記錄文件發(fā)生了那些修改。在有了一個新版本之后,這個指針會指向最新的版本。

③ 通過修改指針的位置可以實現(xiàn)回退到某個版本,表示方式有兩種,一種是用^,一種使用~,如下
l HEAD^ 或者 HEAD~1:表示上一個版本
l HEAD^^ 或者 HEAD~2:表示上兩個版本
通過上面的方式回退到第一個版本之后,指針就指向了版本1

(1) 在git_test目錄下創(chuàng)建一個文件code.txt,寫入一行內容如下:

(2) 使用如下兩條命令可以創(chuàng)建一個版本,創(chuàng)建版本需要兩步:
① git add code.txt
② git commit –m '版本1'

(3) 查看版本記錄,命令是git log:

(4) 繼續(xù)編輯code.txt,在里面增加一行。

(5) 使用如下命令再創(chuàng)建一個版本并查看版本記錄:


(6) 現(xiàn)在若想回到某一個版本,可以使用如下命令:
git reset --hard HEAD^
其中HEAD表示當前最新版本,HEAD^表示當前版本的前一個版本,HEAD^^表示當前版本的前前個版本,也可以使用HEAD~1表示當前版本的前一個版本,HEAD~100表示當前版本的前100版本。
現(xiàn)在若覺得想回到版本1,可以使用如下命令:



執(zhí)行命令后使用git log查看版本記錄,發(fā)現(xiàn)現(xiàn)在只能看到版本1的記錄,cat code.txt查看文件內容,現(xiàn)在只有一行,也就是第一個版本中code.txt的內容。
(7) 假如我們現(xiàn)在又想回到版本2,這個時候怎么辦?
可以使用如下命令:
git reset --hard 版本號
從上面可以看到版本2的版本號為:

(8) 根據查詢到的序號進行版本選擇:


現(xiàn)在發(fā)現(xiàn)版本2有回來了。可以cat code.txt查看其里面的內容如下:
(9) 假如說上面的終端已經關了改怎么回退版本。
我們在執(zhí)行如下命令將版本回退到版本1。

下面把終端關了,然后再打開終端,發(fā)現(xiàn)之前版本2的版本號看不到了。

那么怎么再回到版本2呢?git reflog命令可以查看我們的操作記錄。

可以看到版本2的版本號,我們再使用如下命令進行版本回退,版本重新回到了版本2。

電腦中的目錄,比如我們的git_test,就是一個工作區(qū)。
l 工作區(qū)有一個隱藏目錄.git,這個不是工作區(qū),而是git的版本庫。
l git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有git為我們自動創(chuàng)建的第一個分支master,以及指向master的一個指針叫HEAD。
l 因為我們創(chuàng)建git版本庫時,git自動為我們創(chuàng)建了唯一一個master分支,所以,現(xiàn)在,git commit就是往master分支上提交更改。
l 你可以簡單理解為,需要提交的文件修改通通放到暫存區(qū),然后,一次性提交暫存區(qū)的所有修改。

前面講了我們把文件往git版本庫里添加的時候,是分兩步執(zhí)行的:
第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區(qū);
第二步是用git commit提交更改,實際上就是把暫存區(qū)的所有內容提交到當前分支。
(1) 下面在git_test目錄下再創(chuàng)建一文件code2.txt,然后編輯內容如下:


(2) 然后再次編輯code.txt內容,在其中加入一行,編輯后內容如下:

(3) 使用如下命令查看當前工作樹的狀態(tài):
git status

上面提示我們code.txt被修改,而code2.txt沒有被跟蹤。
(4) 我們使用如下命令把code.txt和code2.txt加入到暫存區(qū),然后再執(zhí)行git status命令,結果如下:

所有git add命令是把所有提交的修改存放到暫存區(qū)。
(5) 然后,執(zhí)行git commit就可以一次性把暫存區(qū)的所有修改提交到分支創(chuàng)建一個版本。


(6) 一旦提交后,如果你又沒有對工作區(qū)做任何修改,那么工作區(qū)就是“干凈”的。執(zhí)行如下命令可以發(fā)現(xiàn):

git管理的文件的修改,它只會提交暫存區(qū)的修改來創(chuàng)建版本。
(1) 編輯code.txt,并使用git add 命令將其添加到暫存區(qū)中。


添加到緩存區(qū)

再添加一行

(2) git commit創(chuàng)建一個版本,

此時并使用git status查看,發(fā)現(xiàn)狀態(tài)不是clean

這是因為第二次修改code.txt內容之后,并沒有將其添加的工作區(qū),所以創(chuàng)建版本的時候并沒有被提交。
(1) 繼續(xù)上面的操作,提示我們可以使用格式來撤銷操作,也就是丟棄工作區(qū)中你的修改:
git checkout -- <文件>
執(zhí)行如下命令,

發(fā)現(xiàn)工作區(qū)干凈了,

第二次的改動內容也沒了。

(1) 前面所演示的是尚未添加到暫存區(qū)中的內容進行回滾,其實,即使加入到了暫存區(qū),也是開始可以回滾的。
我們繼續(xù)編輯code.txt,并在其中添加如下內容 

并將其添加的暫存區(qū)

(3)git同樣告訴我們,用命令git reset [選項] HEAD file可以把暫存區(qū)的修改撤銷掉,重新放回工作區(qū)。
選項有三個
l --hard:緩存區(qū)和工作目錄中的內容都回滾到指定的那個版本狀態(tài)
l --mixed:默認選項,緩存區(qū)和你指定的提交同步,但是工作目錄不受影響
l --soft:緩存區(qū)和工作目錄中的內容都不變(僅僅庫中的內容回滾的指定版本)
l 使用這些選項的時候,就不能再指定具體的文件了

狀態(tài)

到這里,僅僅是保存在將暫存區(qū)中的內容刪除了,接下來就可以將這個文件回滾到修改之前的狀態(tài)
(4)現(xiàn)在若想丟棄code.txt的修改,執(zhí)行如下命令即可。


現(xiàn)在,如果你不但改錯了東西,還從暫存區(qū)提交到了版本庫,則需要進行版本回退。
小結:
l 場景1:當你改亂了工作區(qū)某個文件的內容,想直接丟棄工作區(qū)的修改時,用命令git checkout -- file。
l 場景2:當你不但改亂了工作區(qū)某個文件的內容,還添加到了暫存區(qū)時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。
l 場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節(jié)。
來演示三個選項的作用
先來演示hard選項
1 在版本庫中編輯一個文件1,并add到暫存區(qū)

2 編輯另一個文件(不保存到暫存區(qū))

3 查看狀態(tài),一個在暫存區(qū) 一個是未追蹤狀態(tài)

4 用git reset --hard xxxx 回滾到一個狀態(tài)

5 再次查看狀態(tài)(此時發(fā)現(xiàn)是clean,什么狀態(tài)的都沒有了)

6 這兩個文件中新添加的內容都沒了

先來演示soft選項
前面部分略
1 執(zhí)行 reset,回滾到第一個版本

2 此時暫存區(qū)和文件中的內容都還在

3 查看當前所處的版本,已經回到了第一個版本,其他的版本都沒了

對比工作區(qū)和某個版本中文件的不同:
(1) 繼續(xù)編輯文件code.txt,在其中添加一行內容。

(2) 現(xiàn)在要對比工作區(qū)中code.txt和上個版本中code.txt的不同。使用如下命令:

我們也可以和版本庫中的第二個版本做比對

對比兩個版本間文件的不同:
(1) 現(xiàn)在要對比HEAD和HEAD^版本中code.txt的不同,使用如下命令:

(1) 我們把目錄中的code2.txt刪除。

這個時候,git知道刪除了文件,因此,工作區(qū)和版本庫就不一致了,git status命令會立刻提示哪些文件被刪除了。

(2) 現(xiàn)在你有兩個選擇,一是確實要從版本庫中刪除該文件,那就用命令git rm刪掉,并且git commit:



另一種情況是刪錯了,可以直接使用git checkout – code2.txt,這樣文件code2.txt又回來了。
小結:
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
本文標題:git應用快速入門-創(chuàng)新互聯(lián)
當前地址:http://www.rwnh.cn/article38/csdppp.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供電子商務、虛擬主機、標簽優(yōu)化、云服務器、網站改版、網站維護
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)