
Git是一款免費(fèi)、開(kāi)源的分布式版本控制系統(tǒng),用于敏捷高效地處理任何或小或大的項(xiàng)目 Git 是 linux 發(fā)明者 Linus 開(kāi)發(fā)的一款新時(shí)代的版本控制系統(tǒng),這里我只舉幾個(gè)例子來(lái)幫助你們理解。
熟悉編程的知道,我們?cè)谲浖_(kāi)發(fā)中源代碼其實(shí)是最重要的,那么對(duì)源代碼的管理變得異常重要:
比如為了防止代碼的丟失,肯定本地機(jī)器與遠(yuǎn)程服務(wù)器都要存放一份,而且還需要有一套機(jī)制讓本地可以跟遠(yuǎn)程同步;
又比如我們經(jīng)常是好幾個(gè)人做同一個(gè)項(xiàng)目,都要對(duì)一份代碼做更改,這個(gè)時(shí)候需要大家互不影響,又需要各自可以同步別人的代碼;
又比如我們開(kāi)發(fā)的時(shí)候免不了有bug,有時(shí)候剛發(fā)布的功能就出現(xiàn)了嚴(yán)重的bug,這個(gè)時(shí)候需要緊急對(duì)代碼進(jìn)行還原;
又比如隨著我們版本迭代的功能越來(lái)越多,但是我們需要清楚的知道歷史每一個(gè)版本的代碼更改記錄,甚至知道每個(gè)人歷史提交代碼的情況;
等等等類(lèi)似以上的情況,這些都是版本控制系統(tǒng)能解決的問(wèn)題。所以說(shuō),版本控制是一種記錄一個(gè)或若干文件內(nèi)容變化,以便將來(lái)查閱特定版本修訂情況的系統(tǒng),對(duì)于軟件開(kāi)發(fā)領(lǐng)域來(lái)說(shuō)版本控制是最重要的一環(huán),而 Git 毫無(wú)疑問(wèn)是當(dāng)下最流行、最好用的版本控制系統(tǒng)。
使用Git進(jìn)行版本控制有兩種方式,一是使用msysgit命令行方式,另一種則是使用圖形化工具TortoiseGit,但兩種方式都需安裝msysgit。
Git為了提高效率,對(duì)于沒(méi)有被修改的文件,則不會(huì)重復(fù)存儲(chǔ),而是創(chuàng)建一個(gè)鏈接指向之前存儲(chǔ)過(guò)的文件。 在正式使用前,我們還需要弄清楚Git的三種重要模式,分別是已提交、已修改、已暫存。
已提交(committed):表示數(shù)據(jù)文件已經(jīng)順利提交到Git數(shù)據(jù)庫(kù)中。
已修改(modified):表示數(shù)據(jù)文件已經(jīng)被修改,但未被保存到Git數(shù)據(jù)庫(kù)中。
已暫存(staged):表示數(shù)據(jù)文件已經(jīng)被修改,并會(huì)在下次提交時(shí)提交到Git數(shù)據(jù)庫(kù)中。
提交前的數(shù)據(jù)文件可能會(huì)被隨意修改或丟失,但只要把文件快照順利提交到Git數(shù)據(jù)庫(kù)中,那就可以完全放心了,流程為:
在工作目錄中修改數(shù)據(jù)文件。
將文件的快照放入暫存區(qū)域。
將暫存區(qū)域的文件快照提交到Git倉(cāng)庫(kù)中。
TortoiseGIT 是Git版本控制系統(tǒng)的一個(gè)免費(fèi)開(kāi)源客戶(hù)端,它是git版本控制的 Windows擴(kuò)展。可以使你避免使用枯燥而且不方便的命令行。它完全嵌入 Windows Explorer,使用時(shí)只需在正常的窗口里點(diǎn)擊右鍵操作就可以了。TortoiseGIT
SVN與Git的最主要的區(qū)別?
SVN是集中式版本控制系統(tǒng),版本庫(kù)是集中放在中央服務(wù)器的,而干活的時(shí)候,用的都是自己的電腦,所以首先要從中央服務(wù)器哪里得到最新的版本,然后干活, 干完后,需要把自己做完的活推送到中央服務(wù)器。集中式版本控制系統(tǒng)是必須聯(lián)網(wǎng)才能工作,如果在局域網(wǎng)還可以,帶寬夠大,速度夠快,如果在互聯(lián)網(wǎng)下,如果網(wǎng) 速慢的話(huà),就納悶了。 Git是分布式版本控制系統(tǒng),那么它就沒(méi)有中央服務(wù)器的,每個(gè)人的電腦就是一個(gè)完整的版本庫(kù),這樣,工作的時(shí)候就不需要聯(lián)網(wǎng)了,因?yàn)榘姹径际窃谧约旱碾娔X 上。既然每個(gè)人的電腦都有一個(gè)完整的版本庫(kù),那多個(gè)人如何協(xié)作呢?比如說(shuō)自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時(shí),你們兩之間只需把各 自的修改推送給對(duì)方,就可以互相看到對(duì)方的修改了。上面說(shuō)了,Git 是一個(gè)版本控制系統(tǒng),你也可以理解成是一個(gè)工具,跟 java 類(lèi)似,使用之前必須得先下載安裝,所以第一步必須要安裝,這里Windows平臺(tái)的安裝方式,這部分就不過(guò)多介紹,相信大家這里搞的定。 Windows:
下載完成后,雙擊安裝即可,雙擊打開(kāi)安裝設(shè)置界面。然后點(diǎn)擊“Next”,出現(xiàn)如下界面進(jìn)行配置安裝組件,默認(rèn)即可,包括創(chuàng)建桌面快捷方式、Git Bash、Git GUi、已經(jīng)目錄和后綴關(guān)聯(lián)等。點(diǎn)擊“Next”。 
在“Adjusting your PATH environment”選項(xiàng)中,默認(rèn)即可。這個(gè)步驟最好選擇第二項(xiàng)“Use Git from the Windows Command PRompt”, 這樣在Windows的命令行cmd中也可以運(yùn)行g(shù)it命令了。點(diǎn)擊“Next”繼續(xù):
第一個(gè)意思是只能通過(guò)git bash輸入命令,
第二個(gè)指可以通過(guò)cmd啟動(dòng)git,輸入git相關(guān)命令必須等它啟動(dòng)后
第三個(gè)指將可以在cmd中直接輸入git的相關(guān)命令,注意這個(gè)可能會(huì)覆蓋cmd中原有的命令

是為了處理windows和linux/unix中換行符的不同(windows中換行符是CRLF,linux/unix中是LF)
第一個(gè)選項(xiàng):會(huì)將所有的LF轉(zhuǎn)換為CRLF,如何你是在windows下使用,建議勾選
第二個(gè)選項(xiàng):會(huì)將所有的CRLF轉(zhuǎn)換為L(zhǎng)F,如何你是在linux/unix下使用,建議勾選; 第三個(gè)選項(xiàng):不進(jìn)行換行符的轉(zhuǎn)換
在終端模擬器選擇頁(yè)面,默認(rèn)即可,配置后Git Bash的終端比較易用。然后點(diǎn)擊“Next” 
最后配置Git額外選擇默認(rèn)即可。然后點(diǎn)擊“Install”開(kāi)始安裝。如果之前安裝過(guò)舊版本,會(huì)先卸載然后再安裝新版本。 
安裝完成后,在開(kāi)始菜單里面找到 “Git –> Git Bash”
會(huì)彈出一個(gè)類(lèi)似的命令窗口的東西,就說(shuō)明Git安裝成功。如下:
安裝完成后,還需要最后一步設(shè)置,在命令行輸入如下:
因?yàn)镚it是分布式版本控制系統(tǒng),所以需要填寫(xiě)用戶(hù)名和郵箱作為一個(gè)標(biāo)識(shí)。
雙擊下載好的安裝包,前面幾個(gè)選項(xiàng)可默認(rèn)即可,當(dāng)出現(xiàn)進(jìn)入Choose SSH Client頁(yè)面時(shí),選擇TortoisePLink選項(xiàng):
選擇next按鈕,進(jìn)入Custom Setup頁(yè)面,使用默認(rèn)或者指定路徑安裝;
當(dāng)出現(xiàn)如下窗口,那么恭喜你安裝成功了,接下來(lái)就可以使用了。 
安裝完成之后對(duì)其進(jìn)行配置 右鍵TortoiseGit進(jìn)入設(shè)置界面
設(shè)置用戶(hù)名和郵箱 
使用Git的優(yōu)勢(shì) 任意兩個(gè)開(kāi)發(fā)者之間可以很容易的解決沖突。 為什么使用Git容易解決沖突,先請(qǐng)看開(kāi)源項(xiàng)目工作流程圖:
如上圖所示,使用Git進(jìn)行版本控制的時(shí)候,有一個(gè)主開(kāi)發(fā)者和若干開(kāi)發(fā)者,其只有主開(kāi)發(fā)者有提交代碼到github,其他開(kāi)發(fā)者完成功能后都是通過(guò)create patch發(fā)送補(bǔ)丁給主開(kāi)發(fā)者,然后由主開(kāi)發(fā)者獲取補(bǔ)丁apply patch并Push到服務(wù)器,這樣就有效解決了代碼沖突問(wèn)題。
要使用git,首先得有一個(gè)遠(yuǎn)程倉(cāng)庫(kù)吧,下面是在自己的主頁(yè)中新建一個(gè)遠(yuǎn)程倉(cāng)庫(kù): ps:其中倉(cāng)庫(kù)類(lèi)型要選擇public(公開(kāi)),私有的是要收費(fèi)的 

建立遠(yuǎn)程倉(cāng)庫(kù)之后會(huì)有這樣一個(gè)頁(yè)面,點(diǎn)擊箭頭所指按鈕,拷貝倉(cāng)庫(kù)地址: (這個(gè)地址一會(huì)要用) 
使用TortoiseGit工具 Clone 剛才建立的倉(cāng)庫(kù)
當(dāng)出現(xiàn)如下圖,那么恭喜你,項(xiàng)目成功克隆下來(lái)了。
然后你再本地會(huì)發(fā)現(xiàn)有這樣一個(gè)文件夾
接下來(lái)你只要上傳文件即可,如下本人是上傳一個(gè)工程名為ClearEditText的文件夾;
首先使用TortoiseGit的add命令將新添加的文件或文件夾add進(jìn)來(lái),然后再使用Git Commit將文件提交的本地,在使用TortoiseGit的Push將文件上傳到Github。這里需要注意TortoiseGit的pull和TortoiseSvn的update是一樣的功能,即將服務(wù)器的最新代碼同步到本地。
在自己的電腦上新建一個(gè)文件夾作為項(xiàng)目目錄;到項(xiàng)目目錄下點(diǎn)擊右鍵,選擇Git Bash Here,調(diào)出命令行界面,如輸入 git init, 就會(huì)把這個(gè)目錄變成git可以管理的倉(cāng)庫(kù) 
之后可以在目錄下創(chuàng)建文件,寫(xiě)代碼了,寫(xiě)完代碼之后,右鍵選擇 tortoiseGit->add 將目錄下的文件添加到暫存區(qū)里面去,此時(shí)目錄下的文件會(huì)呈現(xiàn)相應(yīng)的圖標(biāo)樣式,如下圖:具體什么樣的圖標(biāo)代表什么這里不過(guò)多介紹
右鍵:git commont ->”master” 把文件提交到倉(cāng)庫(kù)的主分支 ,寫(xiě)上注釋 右鍵:tortoiseGit 選擇push操作,把本地庫(kù)的內(nèi)容推送到遠(yuǎn)程,輸入在遠(yuǎn)程代碼倉(cāng)庫(kù)建立項(xiàng)目的遠(yuǎn)程地址,之后輸入用戶(hù)名和密碼有能夠提交了

初次運(yùn)行Git前的配置 用戶(hù)信息 當(dāng)安裝完 Git 應(yīng)該做的第一件事就是設(shè)置你的用戶(hù)名稱(chēng)與郵件地址 這樣做很重要,因?yàn)槊恳粋€(gè) Git 的提交都會(huì)使用這些信息,并且它會(huì)寫(xiě)入到你的每一次提交中,不可更改:
git config --global user.name "John Doe"git config --global user.email johndoe@example.com如果使用了 –global 選項(xiàng),那么該命令只需要運(yùn)行一次,因?yàn)橹鬅o(wú)論你在該系統(tǒng)上做任何事情, Git 都會(huì)使用那些信息當(dāng)你想針對(duì)特定項(xiàng)目使用不同的用戶(hù)名稱(chēng)與郵件地址時(shí),可以在那個(gè)項(xiàng)目目錄下運(yùn)行沒(méi)有 –global 選項(xiàng)的命令來(lái)配置
文本編輯器 既然用戶(hù)信息已經(jīng)設(shè)置完畢,你可以配置默認(rèn)文本編輯器了,當(dāng) Git 需要你輸入信息時(shí)會(huì)調(diào)用它 如果未配置,Git 會(huì)使用操作系統(tǒng)默認(rèn)的文本編輯器,通常是 Vim 如果你想使用不同的文本編輯器,例如 Emacs,可以這樣做:
git config --global core.editor emacs檢查配置信息 如果想要檢查你的配置,可以使用 git config –list 命令來(lái)列出所有 Git 當(dāng)時(shí)能找到的配置
你可以通過(guò)輸入 git config : 來(lái)檢查 Git 的某一項(xiàng)配置,如:
git config user.name
pwd 命令是用于顯示當(dāng)前的目錄。


如果和上面一樣,沒(méi)有任何提示,說(shuō)明已經(jīng)添加成功了。 第二步:用命令 git commit告訴Git,把文件提交到倉(cāng)庫(kù)。
現(xiàn)在我們已經(jīng)提交了一個(gè)readme.txt文件了,我們下面可以通過(guò)命令git status來(lái)查看是否還有文件未提交,如下:
說(shuō)明沒(méi)有任何文件未提交,但是我現(xiàn)在繼續(xù)來(lái)改下readme.txt內(nèi)容,比如我在下面添加一行2222222222內(nèi)容,繼續(xù)使用git status來(lái)查看下結(jié)果,如下:
上面的命令告訴我們 readme.txt文件已被修改,但是未被提交的修改。
接下來(lái)我想看下readme.txt文件到底改了什么內(nèi)容,如何查看呢?可以使用如下命令: git diff readme.txt 如下:
件內(nèi)容從一行11111111改成 二行 添加了一行22222222內(nèi)容。
知道了對(duì)readme.txt文件做了什么修改后,我們可以放心的提交到倉(cāng)庫(kù)了,提交修改和提交文件是一樣的2步(第一步是git add 第二步是:git commit)。
內(nèi)容為33333333333333.繼續(xù)執(zhí)行命令如下:
現(xiàn)在我已經(jīng)對(duì)readme.txt文件做了三次修改了,那么我現(xiàn)在想查看下歷史記錄,如何查呢?我們現(xiàn)在可以使用命令 git log 演示如下所示:
現(xiàn)在我想使用版本回退操作,我想把當(dāng)前的版本回退到上一個(gè)版本,要使用什么命令呢?可以使用如下2種命令,第一種是:git reset –hard HEAD^ 那么如果要回退到上上個(gè)版本只需把HEAD^ 改成 HEAD^^ 以此類(lèi)推。那如果要回退到前100個(gè)版本的話(huà),使用上面的方法肯定不方便,我們可以使用下面的簡(jiǎn)便命令操作:git reset –hard HEAD~100 即可。未回退之前的readme.txt內(nèi)容如下:
如果想回退到上一個(gè)版本的命令如下操作:
再來(lái)查看下 readme.txt內(nèi)容如下:通過(guò)命令cat readme.txt查看

可以看到,內(nèi)容已經(jīng)回退到上一個(gè)版本了。我們可以繼續(xù)使用git log 來(lái)查看下歷史記錄信息,如下:
我們看到 增加333333 內(nèi)容我們沒(méi)有看到了,但是現(xiàn)在我想回退到最新的版本,如:有333333的內(nèi)容要如何恢復(fù)呢?我們可以通過(guò)版本號(hào)回退,使用命令方法如下: git reset –hard 版本號(hào) ,但是現(xiàn)在的問(wèn)題假如我已經(jīng)關(guān)掉過(guò)一次命令行或者333內(nèi)容的版本號(hào)我并不知道呢?要如何知道增加3333內(nèi)容的版本號(hào)呢?可以通過(guò)如下命令即可獲取到版本號(hào):git reflog 演示如下:
通過(guò)上面的顯示我們可以知道,增加內(nèi)容3333的版本號(hào)是 6fcfc89.我們現(xiàn)在可以命令
git reset –hard 6fcfc89來(lái)恢復(fù)了。演示如下:
可以看到 目前已經(jīng)是最新的版本了。
我們前面說(shuō)過(guò)使用Git提交文件到版本庫(kù)有兩步: 第一步:是使用 git add 把文件添加進(jìn)去,實(shí)際上就是把文件添加到暫存區(qū)。
第二步:使用git commit提交更改,實(shí)際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支上。 我們繼續(xù)使用demo來(lái)演示下:
我們?cè)趓eadme.txt再添加一行內(nèi)容為4444444,接著在目錄下新建一個(gè)文件為test.txt 內(nèi)容為test,我們先用命令 git status來(lái)查看下?tīng)顟B(tài),如下:
現(xiàn)在我們先使用git add 命令把2個(gè)文件都添加到暫存區(qū)中,再使用git status來(lái)查看下?tīng)顟B(tài),如下:
接著我們可以使用git commit一次性提交到分支上,如下:
一:撤銷(xiāo)修改:
比如我現(xiàn)在在readme.txt文件里面增加一行 內(nèi)容為555555555555,我們先通過(guò)命令查看如下:

在我未提交之前,我發(fā)現(xiàn)添加5555555555555內(nèi)容有誤,所以我得馬上恢復(fù)以前的版本,現(xiàn)在我可以有如下幾種方法可以做修改:
第一:如果我知道要?jiǎng)h掉那些內(nèi)容的話(huà),直接手動(dòng)更改去掉那些需要的文件,然后add添加到暫存區(qū),最后commit掉。
第二:我可以按以前的方法直接恢復(fù)到上一個(gè)版本。使用 git reset –hard HEAD^
但是現(xiàn)在我不想使用上面的2種方法,我想直接想使用撤銷(xiāo)命令該如何操作呢?首先在做撤銷(xiāo)之前,我們可以先用 git status 查看下當(dāng)前的狀態(tài)。如下所示: 
可以發(fā)現(xiàn),Git會(huì)告訴你,git checkout — file 可以丟棄工作區(qū)的修改,如下命令:
git checkout – readme.txt,如下所示:
命令 git checkout –readme.txt 意思就是,把readme.txt文件在工作區(qū)做的修改全部撤銷(xiāo),這里有2種情況,如下:

注意:命令git checkout — readme.txt 中的 — 很重要,如果沒(méi)有 — 的話(huà),那么命令變成創(chuàng)建分支了。
二:刪除文件。 假如我現(xiàn)在版本庫(kù)testgit目錄添加一個(gè)文件b.txt,然后提交。如下:
如上:一般情況下,可以直接在文件目錄中把文件刪了,或者使用如上rm命令:rm b.txt ,如果我想徹底從版本庫(kù)中刪掉了此文件的話(huà),可以再執(zhí)行commit命令 提交掉,現(xiàn)在目錄是這樣的, 
只要沒(méi)有commit之前,如果我想在版本庫(kù)中恢復(fù)此文件如何操作呢?
可以使用如下命令 git checkout — b.txt,如下所示:
再來(lái)看看我們testgit目錄,添加了3個(gè)文件了。如下所示: 
在了解之前,先注冊(cè)github賬號(hào),由于你的本地Git倉(cāng)庫(kù)和github倉(cāng)庫(kù)之間的傳輸是通過(guò)SSH加密的,所以需要一點(diǎn)設(shè)置:
第一步:創(chuàng)建SSH Key。在用戶(hù)主目錄下,看看有沒(méi)有.ssh目錄,如果有,再看看這個(gè)目錄下有沒(méi)有id_rsa和id_rsa.pub這兩個(gè)文件,如果有的話(huà),直接跳過(guò)此如下命令,如果沒(méi)有的話(huà),打開(kāi)命令行,輸入如下命令: ssh-keygen -t rsa –C “youremail@example.com”, 由于我本地此前運(yùn)行過(guò)一次,所以本地有,如下所示:
id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
第二步:登錄github,打開(kāi)” settings”中的SSH Keys頁(yè)面,然后點(diǎn)擊“Add SSH Key”,填上任意title,在Key文本框里黏貼id_rsa.pub文件的內(nèi)容。
點(diǎn)擊 Add Key,你就應(yīng)該可以看到已經(jīng)添加的key。
1.如何添加遠(yuǎn)程庫(kù)? 現(xiàn)在的情景是:我們已經(jīng)在本地創(chuàng)建了一個(gè)Git倉(cāng)庫(kù)后,又想在github創(chuàng)建一個(gè)Git倉(cāng)庫(kù),并且希望這兩個(gè)倉(cāng)庫(kù)進(jìn)行遠(yuǎn)程同步,這樣github的倉(cāng)庫(kù)可以作為備份,又可以其他人通過(guò)該倉(cāng)庫(kù)來(lái)協(xié)作。 首先,登錄github上,然后在右上角找到“create a new repo”創(chuàng)建一個(gè)新的倉(cāng)庫(kù)。如下:
在Repository name填入testgit,其他保持默認(rèn)設(shè)置,點(diǎn)擊“Create repository”按鈕,就成功地創(chuàng)建了一個(gè)新的Git倉(cāng)庫(kù):
目前,在GitHub上的這個(gè)testgit倉(cāng)庫(kù)還是空的,GitHub告訴我們,可以從這個(gè)倉(cāng)庫(kù)克隆出新的倉(cāng)庫(kù),也可以把一個(gè)已有的本地倉(cāng)庫(kù)與之關(guān)聯(lián),然后,把本地倉(cāng)庫(kù)的內(nèi)容推送到GitHub倉(cāng)庫(kù)。 現(xiàn)在,我們根據(jù)GitHub的提示,在本地的testgit倉(cāng)庫(kù)下運(yùn)行命令:
git remote add origin https://github.com/tugenhua0707/testgit.git 所有的如下:

把本地庫(kù)的內(nèi)容推送到遠(yuǎn)程,使用 git push命令,實(shí)際上是把當(dāng)前分支master推送到遠(yuǎn)程。
由于遠(yuǎn)程庫(kù)是空的,我們第一次推送master分支時(shí),加上了 –u參數(shù),Git不但會(huì)把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,還會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來(lái), 在以后的推送或者拉取時(shí)就可以簡(jiǎn)化命令。推送成功后,可以立刻在github頁(yè)面中看到遠(yuǎn)程庫(kù)的內(nèi)容已經(jīng)和本地一模一樣了,上面的要輸入github的用 戶(hù)名和密碼如下所示:
從現(xiàn)在起,只要本地作了提交,就可以通過(guò)如下命令:
git push origin master
把本地master分支的最新修改推送到github上了,現(xiàn)在你就擁有了真正的分布式版本庫(kù)了。
如何從遠(yuǎn)程庫(kù)克隆
上面我們了解了先有本地庫(kù),后有遠(yuǎn)程庫(kù)時(shí)候,如何關(guān)聯(lián)遠(yuǎn)程庫(kù)。
現(xiàn)在我們想,假如遠(yuǎn)程庫(kù)有新的內(nèi)容了,我想克隆到本地來(lái) 如何克隆呢?
首先,登錄github,創(chuàng)建一個(gè)新的倉(cāng)庫(kù),名字叫testgit2.如下:
如下,我們看到:
現(xiàn)在,遠(yuǎn)程庫(kù)已經(jīng)準(zhǔn)備好了,下一步是使用命令git clone克隆一個(gè)本地庫(kù)了。如下所示: 
接著在我本地目錄下 生成testgit2目錄了,如下所示: 
在 版本回填退里,你已經(jīng)知道,每次提交,Git都把它們串成一條時(shí)間線(xiàn),這條時(shí)間線(xiàn)就是一個(gè)分支。截止到目前,只有一條時(shí)間線(xiàn),在Git里,這個(gè)分支叫主 分支,即master分支。HEAD嚴(yán)格來(lái)說(shuō)不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當(dāng)前分支。 首先,我們來(lái)創(chuàng)建dev分支,然后切換到dev分支上。如下操作: 
git checkout 命令加上 –b參數(shù)表示創(chuàng)建并切換,相當(dāng)于如下2條命令 git branch dev git checkout dev
git branch查看分支,會(huì)列出所有的分支,當(dāng)前分支前面會(huì)添加一個(gè)星號(hào)。然后我們?cè)赿ev分支上繼續(xù)做demo,比如我們現(xiàn)在在readme.txt再增加一行 7777777777777
首先我們先來(lái)查看下readme.txt內(nèi)容,接著添加內(nèi)容77777777,如下: 
現(xiàn)在dev分支工作已完成,現(xiàn)在我們切換到主分支master上,繼續(xù)查看readme.txt內(nèi)容如下: 
現(xiàn)在我們可以把dev分支上的內(nèi)容合并到分支master上了,可以在master分支上,使用如下命令 git merge dev 如下所示: 
git merge命令用于合并指定分支到當(dāng)前分支上,合并后,再查看readme.txt內(nèi)容,可以看到,和dev分支最新提交的是完全一樣的。
注意到上面的Fast-forward信息,Git告訴我們,這次合并是“快進(jìn)模式”,也就是直接把master指向dev的當(dāng)前提交,所以合并速度非常快。
合并完成后,我們可以接著刪除dev分支了,操作如下: 
查看分支:git branch
創(chuàng)建分支:git branch name
切換分支:git checkout name
創(chuàng)建+切換分支:git checkout –b name
合并某分支到當(dāng)前分支:git merge name
刪除分支:git branch –d name
下面我們還是一步一步來(lái),先新建一個(gè)新分支,比如名字叫fenzhi1,在readme.txt添加一行內(nèi)容8888888,然后提交,如下所示:
同樣,我們現(xiàn)在切換到master分支上來(lái),也在最后一行添加內(nèi)容,內(nèi)容為99999999,如下所示: 
現(xiàn)在我們需要在master分支上來(lái)合并fenzhi1,如下操作: 
Git用<<<<<<<,=======,>>>>>>>標(biāo)記出 不同分支的內(nèi)容,其中>>>>fenzhi1 是指fenzhi1上修改的內(nèi)容,我們可以修改下如下后保存: 
如果我想查看分支合并的情況的話(huà),需要使用命令 git log.命令行
分支管理策略
通常合并分支時(shí),git一般使用”Fast forward”模式,在這種模式下,刪除分支后,會(huì)丟掉分支信息,現(xiàn)在我們來(lái)使用帶參數(shù) –no-ff來(lái)禁用”Fast forward”模式。首先我們來(lái)做demo演示下:創(chuàng)建一個(gè)dev分支。 修改readme.txt內(nèi)容。 添加到暫存區(qū)。 切換回主分支(master)。 合并dev分支,使用命令 git merge –no-ff -m “注釋” dev 查看歷史記錄 截圖如下:
分支策略:首先master主分支應(yīng)該是非常穩(wěn)定的,也就是用來(lái)發(fā)布新版本,一般情況下不允許在上面干活,干活一般情況下在新建的dev分支上干活,干完后,比如上要發(fā)布,或者說(shuō)dev分支代碼穩(wěn)定后可以合并到主分支master上來(lái)。
bug分支: 在開(kāi)發(fā)中,會(huì)經(jīng)常碰到bug問(wèn)題,那么有了bug就需要修復(fù),在Git中,分支是很強(qiáng)大的,每個(gè)bug都可以通過(guò)一個(gè)臨時(shí)分支來(lái)修復(fù),修復(fù)完成后,合并分支,然后將臨時(shí)的分支刪除掉。
比如我在開(kāi)發(fā)中接到一個(gè)404 bug時(shí)候,我們可以創(chuàng)建一個(gè)404分支來(lái)修復(fù)它,但是,當(dāng)前的dev分支上的工作還沒(méi)有提交。比如如下:
并不是我不想提交,而是工作進(jìn)行到一半時(shí)候,我們還無(wú)法提交,比如我這個(gè)分支bug要2天完成,但是我issue-404 bug需要5個(gè)小時(shí)內(nèi)完成。怎么辦呢?還好,Git還提供了一個(gè)stash功能,可以把當(dāng)前工作現(xiàn)場(chǎng) ”隱藏起來(lái)”,等以后恢復(fù)現(xiàn)場(chǎng)后繼續(xù)工作。如下:
所以現(xiàn)在我可以通過(guò)創(chuàng)建issue-404分支來(lái)修復(fù)bug了。
首先我們要確定在那個(gè)分支上修復(fù)bug,比如我現(xiàn)在是在主分支master上來(lái)修復(fù)的,現(xiàn)在我要在master分支上創(chuàng)建一個(gè)臨時(shí)分支,演示如下:
修復(fù)完成后,切換到master分支上,并完成合并,最后刪除issue-404分支。演示如下:
現(xiàn)在,我們回到dev分支上干活了。 
工作區(qū)是干凈的,那么我們工作現(xiàn)場(chǎng)去哪里呢?我們可以使用命令 git stash list來(lái)查看下。如下:

工作現(xiàn)場(chǎng)還在,Git把stash內(nèi)容存在某個(gè)地方了,但是需要恢復(fù)一下,可以使用如下2個(gè)方法:
git stash apply恢復(fù),恢復(fù)后,stash內(nèi)容并不刪除,你需要使用命令git stash drop來(lái)刪除。 另一種方式是使用git stash pop,恢復(fù)的同時(shí)把stash內(nèi)容也刪除了。
當(dāng)你從遠(yuǎn)程庫(kù)克隆時(shí)候,實(shí)際上Git自動(dòng)把本地的master分支和遠(yuǎn)程的master分支對(duì)應(yīng)起來(lái)了,并且遠(yuǎn)程庫(kù)的默認(rèn)名稱(chēng)是origin。
要查看遠(yuǎn)程庫(kù)的信息 使用 git remote 要查看遠(yuǎn)程庫(kù)的詳細(xì)信息 使用 git remote –v
推送分支: 推送分支就是把該分支上所有本地提交到遠(yuǎn)程庫(kù)中,推送時(shí),要指定本地分支,這樣,Git就會(huì)把該分支推送到遠(yuǎn)程庫(kù)對(duì)應(yīng)的遠(yuǎn)程分支上: 使用命令 git push origin master
比如我現(xiàn)在的github上的readme.txt代碼如下:
本地的readme.txt代碼如下:
現(xiàn)在我想把本地更新的readme.txt代碼推送到遠(yuǎn)程庫(kù)中,使用命令如下:
我們可以看到如上,推送成功,我們可以繼續(xù)來(lái)截圖github上的readme.txt內(nèi)容 如下: 
可以看到 推送成功了,如果我們現(xiàn)在要推送到其他分支,比如dev分支上,我們還是那個(gè)命令 git push origin dev
那么一般情況下,那些分支要推送呢?
master分支是主分支,因此要時(shí)刻與遠(yuǎn)程同步。 一些修復(fù)bug分支不需要推送到遠(yuǎn)程去,可以先合并到主分支上,然后把主分支master推送到遠(yuǎn)程去。 抓取分支:
多人協(xié)作時(shí),大家都會(huì)往master分支上推送各自的修改。現(xiàn)在我們可以模擬另外一個(gè)同事,可以在另一臺(tái)電腦上(注意要把SSH key添加到github上)或者同一臺(tái)電腦上另外一個(gè)目錄克隆,新建一個(gè)目錄名字叫testgit2 但是我首先要把dev分支也要推送到遠(yuǎn)程去,如下
接著進(jìn)入testgit2目錄,進(jìn)行克隆遠(yuǎn)程的庫(kù)到本地來(lái),如下:
現(xiàn)在目錄下生成有如下所示:
現(xiàn)在我們的小伙伴要在dev分支上做開(kāi)發(fā),就必須把遠(yuǎn)程的origin的dev分支到本地來(lái),于是可以使用命令創(chuàng)建本地dev分支:git checkout –b dev origin/dev
現(xiàn)在小伙伴們就可以在dev分支上做開(kāi)發(fā)了,開(kāi)發(fā)完成后把dev分支推送到遠(yuǎn)程庫(kù)時(shí)。
小伙伴們已經(jīng)向origin/dev分支上推送了提交,而我在我的目錄文件下也對(duì)同樣的文件同個(gè)地方作了修改,也試圖推送到遠(yuǎn)程庫(kù)時(shí),如下:
由上面可知:推送失敗,因?yàn)槲业男』锇樽钚绿峤坏暮臀以噲D推送的有沖突,解決的辦法也很簡(jiǎn)單,上面已經(jīng)提示我們,先用git pull把最新的提交從origin/dev抓下來(lái),然后在本地合并,解決沖突,再推送。
git pull也失敗了,原因是沒(méi)有指定本地dev分支與遠(yuǎn)程origin/dev分支的鏈接,根據(jù)提示,設(shè)置dev和origin/dev的鏈接:如下:
這回git pull成功,但是合并有沖突,需要手動(dòng)解決,解決的方法和分支管理中的 解決沖突完全一樣。解決后,提交,再push: 我們可以先來(lái)看看readme.txt內(nèi)容了。
現(xiàn)在手動(dòng)已經(jīng)解決完了,我接在需要再提交,再push到遠(yuǎn)程庫(kù)里面去。如下所示:
因此:多人協(xié)作工作模式一般是這樣的:
首先,可以試圖用git push origin branch-name推送自己的修改. 如果推送失敗,則因?yàn)檫h(yuǎn)程分支比你的本地更新早,需要先用git pull試圖合并。 如果合并有沖突,則需要解決沖突,并在本地提交。再用git push origin branch-name推送。
Git基本常用命令如下: mkdir: XX (創(chuàng)建一個(gè)空目錄 XX指目錄名) pwd: 顯示當(dāng)前目錄的路徑。 git init 把當(dāng)前的目錄變成可以管理的git倉(cāng)庫(kù),生成隱藏.git文件。 git add XX 把xx文件添加到暫存區(qū)去。 git commit –m “XX” 提交文件 –m 后面的是注釋。 git status 查看倉(cāng)庫(kù)狀態(tài) git diff XX 查看XX文件修改了那些內(nèi)容 git log 查看歷史記錄 git reset –hard HEAD^ 或者 git reset –hard HEAD~ 回退到上一個(gè)版本 (如果想回退到100個(gè)版本,使用git reset –hard HEAD~100 ) cat XX 查看XX文件內(nèi)容 git reflog 查看歷史記錄的版本號(hào)id git checkout — XX 把XX文件在工作區(qū)的修改全部撤銷(xiāo)。 git rm XX 刪除XX文件 git remote add origin https://github.com/tugenhua0707/testgit 關(guān)聯(lián)一個(gè)遠(yuǎn)程庫(kù) git push –u(第一次要用-u 以后不需要) origin master 把當(dāng)前master分支推送到遠(yuǎn)程庫(kù) git clone https://github.com/tugenhua0707/testgit 從遠(yuǎn)程庫(kù)中克隆 git checkout –b dev 創(chuàng)建dev分支 并切換到dev分支上 git branch 查看當(dāng)前所有的分支 git checkout master 切換回master分支 git merge dev 在當(dāng)前的分支上合并dev分支 git branch –d dev 刪除dev分支 git branch name 創(chuàng)建分支 git stash 把當(dāng)前的工作隱藏起來(lái) 等以后恢復(fù)現(xiàn)場(chǎng)后繼續(xù)工作 git stash list 查看所有被隱藏的文件列表 git stash apply 恢復(fù)被隱藏的文件,但是內(nèi)容不刪除 git stash drop 刪除文件 git stash pop 恢復(fù)文件的同時(shí) 也刪除文件 git remote 查看遠(yuǎn)程庫(kù)的信息 git remote –v 查看遠(yuǎn)程庫(kù)的詳細(xì)信息 git push origin master Git會(huì)把master分支推送到遠(yuǎn)程庫(kù)對(duì)應(yīng)的遠(yuǎn)程分支上

新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注