下載地址:
https://git-scm.com/download/win
根據(jù)自己的電腦選擇是32位的還是64位的。下載完后直接運(yùn)行,之后一直next就好了。安裝成功后,會有這樣一個(gè)標(biāo)志。
(1)首先你要點(diǎn)進(jìn)去https://github.com/這個(gè)網(wǎng)站,注冊一個(gè)github賬號。注冊好之后,要記住郵箱和密碼。
(2) 打開之前的那個(gè)圖標(biāo)就是這樣一個(gè)窗口,首先Git是分布式版本控制系統(tǒng),所以需要填寫用戶名和郵箱作為一個(gè)標(biāo)識,分別輸入這兩個(gè)命令,用戶名和郵箱需要換成自己的。
(3) 打開之前的那個(gè)圖標(biāo)就是這樣一個(gè)窗口?,F(xiàn)在比如我在我的C:/wamp/www/aaa有一個(gè)項(xiàng)目,我要對它進(jìn)行管理怎么辦呢。直接在控制臺里面輸入 cd c:/wamp/www/aaa 之后你就會在aaa這個(gè)目錄里面了。那如何對它進(jìn)行管理呢。直接在控制臺輸入git init
之后你去查看aaa目錄里面發(fā)現(xiàn)里面多了這樣一個(gè)東西。
這是一個(gè)隱藏文件夾,有點(diǎn)電腦看不見,是因?yàn)槲募A選項(xiàng)設(shè)置的隱藏文件不可見,這個(gè)去控制面板里的文件夾選擇設(shè)置一下就好了。
下面我們接著來操作,試著開始寫我們的項(xiàng)目。
首先我寫一個(gè)首頁叫index.html
現(xiàn)在我在我的頁面里寫好了這樣一段話,保存之后我們接著來進(jìn)行操作。
現(xiàn)在我們開始在git里面輸入一段話 git status
我們可以看到index.html這個(gè)文件是紅色,這是說明我們這個(gè)文件已經(jīng)做了修改,但是還沒保存到本地倉庫里面?,F(xiàn)在我們接著執(zhí)行操作 git add index.html 敲完這個(gè)命令接著git status發(fā)現(xiàn)index.html變成綠色的啦。
接著我們敲命令 git commit -m “the first time”
敲完之后,接著使用git status發(fā)現(xiàn)上面說工作區(qū)很干凈,沒有文件要被提交。現(xiàn)在我來解釋一下這幾個(gè)命令。
首先你得明白這幾個(gè)概念,工作區(qū)就是你現(xiàn)在編輯器所處的那個(gè)工程里面,在這個(gè)指的就是aaa這個(gè)文件夾。剛才你寫了一個(gè)index.html寫完之后就是往工作區(qū)增添了一個(gè)文件,然后你用git status查看狀態(tài)發(fā)現(xiàn),index.html是紅色的。git status是什么意思呢,就是查看你工作區(qū)和暫存區(qū)有沒有文件沒被提交到本地倉庫,如果有工作室未向暫存區(qū)保存的就顯示紅色,如果有暫存區(qū)沒提交到本地倉庫的就是綠色。那么什么是本地倉庫呢,就是一開始說的那個(gè)不可見的文件夾,你一執(zhí)行git init命令就會有一個(gè)本地倉庫出來。
現(xiàn)在我們接著來看,如何從工作區(qū)把文件提交到暫存區(qū),就是使用命令git add index.html就可以了。把文件從暫存區(qū)提交到本地倉庫呢,就是使用命令git commit –m “the first time” 這個(gè)引號里面的內(nèi)容是隨意的,就是自己添加一個(gè)備注,比如自己改動(dòng)了什么東西。理解了這句話,我們接著進(jìn)行操作,我們我的index.html里面繼續(xù)添加一段話。我再git status查看一下當(dāng)前的狀態(tài),發(fā)現(xiàn)有未向暫存區(qū)提交的保存,接著我們采用 git commit –m “the second time”命令將暫存區(qū)的文件提交到本地倉庫。之后再用git status來查看一下,發(fā)現(xiàn)已經(jīng)沒有文件要提交了。
到目前為止,我們已經(jīng)向工作區(qū)提交了兩次修改。Git給我們提供了一個(gè)git log 可以查看我們最近的提交歷史。
如果看的很亂,可以使用這個(gè)命令,git log -–pretty=oneline
可以看出來我們的兩次提交,前面那串黃色的就是我們的版本號。現(xiàn)在我發(fā)現(xiàn)我第二次提交的代碼運(yùn)行不好使,想回到我原來的那個(gè)版本怎么辦呢
可以使用命令git reset –hard HEAD^這個(gè)命令是回退到上一個(gè)版本。
執(zhí)行完之后,我再回頭看看我的index.html發(fā)現(xiàn)已經(jīng)變成了我第一次提交時(shí)的樣子。
接著繼續(xù)。萬一要回退到上上個(gè)版本呢,可以使用命令git reset –hard HEAD^^,那要是回到到一百個(gè)版本就要寫100個(gè)^嗎,也太麻煩了吧
現(xiàn)在我們通過git log –pretty=oneline已經(jīng)獲取到了每次修改的版本號。那么我們就可以使用git reset –hard 版本號就好了。比如剛才我要回退到上個(gè)版本就可以使用git reset –hard 21a77
發(fā)現(xiàn)也同樣有效果。這里版本號不用寫全,寫一部分能表示這個(gè)就行?,F(xiàn)在我們再用git log來查看一下現(xiàn)在的狀態(tài),發(fā)現(xiàn)我們現(xiàn)在的版本只剩下一個(gè)了
但是我現(xiàn)在又發(fā)現(xiàn),我知道原來新版本的解決方法了,我又想回到新版本去怎么辦呢,現(xiàn)在用git log已經(jīng)看不到新版本的版本號了。只能采用新的命令了叫做git reflog查看命令歷史。
在這里發(fā)現(xiàn)他記錄了我們所有的操作,現(xiàn)在我們繼續(xù)使用git reset –hard e2f3發(fā)現(xiàn)我們又回到新版本了。我們發(fā)現(xiàn)index.html已經(jīng)回到原來的狀態(tài)了。
現(xiàn)在我們接著往下面進(jìn)行。在index.html里面我們接著添加一行。
后來發(fā)現(xiàn)這句話不是很合適,當(dāng)然這個(gè)時(shí)候我們可以把這句話直接刪掉,然后再git add ,就好了。但也可以通過git checkout – index.html。此時(shí)我們發(fā)現(xiàn)那句話已經(jīng)沒有了。這種情況適用于我們沒有git add到暫存區(qū)之前。如果我們已經(jīng)git add到暫存區(qū)了,怎么撤銷修改呢。我們可以使用命令 git reset HEAD index.html先撤銷暫存區(qū)的修改,然后我們可以通過命令git diff查看暫存區(qū)和工作區(qū)有什么不同,之后我們可以通過命令git checkout –index.html 發(fā)現(xiàn)已經(jīng)修改好了。但是萬一我們已經(jīng)提交到倉庫里呢怎么辦呢,也就是我們git commit了,那就要使用我們上面所說的版本回退了。
現(xiàn)在我們在aaa目錄下新建一個(gè)文件叫test.txt。我們在里面隨便寫幾個(gè)字之后,通過git add text.txt 已經(jīng)git commit –m “the third time”就已經(jīng)把test.txt已經(jīng)寫入本地庫里了。
假設(shè)現(xiàn)在我們發(fā)現(xiàn)我們已經(jīng)不需要test.txt這個(gè)文件了,所以我們把它給刪了。這個(gè)時(shí)候你通過git status發(fā)現(xiàn)工作區(qū)和本地庫里的文件不一樣了。
現(xiàn)在我們有兩種選擇,一種是我們確實(shí)要?jiǎng)h除。使用git rm test.txt 之后再git commit –m “remve test.txt”發(fā)現(xiàn)我們的本地庫里的文件已經(jīng)被刪除了。那么另外一種情況就是我刪錯(cuò)了,我想還原回來怎么辦呢,使用命令git checkout – test.txt就發(fā)現(xiàn)這個(gè)文件已經(jīng)還原了。
到目前為止,我們已經(jīng)學(xué)會了如何在本地庫和工作區(qū)之間進(jìn)行操作,那這時(shí)你就會說我沒有看到如何分工協(xié)作呢,別著急,遠(yuǎn)程倉庫還幫你解決這個(gè)問題。
首先你要點(diǎn)進(jìn)去https://github.com/這個(gè)網(wǎng)站,登錄你剛才注冊的github賬號。
ssh-keygen -t rsa -C youremail@example.com
把這個(gè)郵箱替換成自己的
之后一路回車,如果一切順利的話你去你的C盤下去找你的user文件夾,有的叫用戶,你在里面搜索一下有沒有一個(gè).ssh的文件夾,把它打開之后,里面有這幾個(gè)文件
之后接著打開那個(gè)https://github.com/網(wǎng)站,登錄進(jìn)去。
點(diǎn)擊右邊這個(gè)綠色的圖表,點(diǎn)開下拉框之后里面有個(gè)setting。
之后會出來這樣一個(gè)頁面,點(diǎn)擊左邊的ssh keys,
打開之后是這樣的一個(gè)頁面,隨便寫入一個(gè)title,然后打開你剛才找到的再C盤里的那個(gè)id_rsa.pub.把里面的內(nèi)容復(fù)制到那個(gè)key里面去,之后點(diǎn)擊添加即可。
之后回到一開始的這個(gè)頁面,
點(diǎn)擊中間的那個(gè)加號
選擇第一個(gè),這就相當(dāng)于你自己在遠(yuǎn)程建了一個(gè)倉庫。
點(diǎn)擊之后,會出來這樣一個(gè)頁面?,F(xiàn)在我們在那個(gè)名字哪里寫上aaa,直接點(diǎn)擊創(chuàng)建就好。
目前,在GitHub上的這個(gè)learngit倉庫還是空的,GitHub告訴我們,可以從這個(gè)倉庫克隆出新的倉庫,也可以把一個(gè)已有的本地倉庫與之關(guān)聯(lián),然后,把本地倉庫的內(nèi)容推送到GitHub倉庫。
現(xiàn)在,我們根據(jù)GitHub的提示,在本地的aaa倉庫下運(yùn)行命令:
$ git remote add origin git@github.com:BrouceLee/aaa.git
請千萬注意,把上面的BrouceLee替換成你自己的GitHub賬戶名,否則,你在本地關(guān)聯(lián)的就是我的遠(yuǎn)程庫。
添加后,遠(yuǎn)程庫的名字就是origin,這是Git默認(rèn)的叫法,也可以改成別的,但是origin這個(gè)名字一看就知道是遠(yuǎn)程庫。
接著執(zhí)行命令git push -u origin master
執(zhí)行完之后,我們發(fā)現(xiàn)我們的遠(yuǎn)程庫和本地倉庫已經(jīng)同步了。
從現(xiàn)在起,只要本地作了提交,就可以通過命令:
$ git push origin master
把本地master分支的最新修改推送至GitHub,現(xiàn)在,你就擁有了真正的分布式版本庫!
上次我們講了先有本地庫,后有遠(yuǎn)程庫的時(shí)候,如何關(guān)聯(lián)遠(yuǎn)程庫。
現(xiàn)在,假設(shè)我們從零開發(fā),那么最好的方式是先創(chuàng)建遠(yuǎn)程庫,然后,從遠(yuǎn)程庫克隆。
首先,登陸GitHub,創(chuàng)建一個(gè)新的倉庫,名字叫gitskills:
我們勾選Initialize this repository with a README,這樣GitHub會自動(dòng)為我們創(chuàng)建一個(gè)README.md文件。創(chuàng)建完畢后,可以看到README.md文件:
現(xiàn)在,遠(yuǎn)程庫已經(jīng)準(zhǔn)備好了,下一步是用命令git clone克隆一個(gè)本地庫:
我們在想要?jiǎng)?chuàng)建項(xiàng)目的地方執(zhí)行下面的命令
git clone git@github.com:BrouceLee/gitskills.git
現(xiàn)在去你你想要建工程的地方開始,就可以發(fā)現(xiàn)大體上已經(jīng)建好了。
分支在實(shí)際中有什么用呢?假設(shè)你準(zhǔn)備開發(fā)一個(gè)新功能,但是需要兩周才能完成,第一周你寫了50%的代碼,如果立刻提交,由于代碼還沒寫完,不完整的代碼庫會導(dǎo)致別人不能干活了。如果等代碼全部寫完再一次提交,又存在丟失每天進(jìn)度的巨大風(fēng)險(xiǎn)。
現(xiàn)在有了分支,就不用怕了。你創(chuàng)建了一個(gè)屬于你自己的分支,別人看不到,還繼續(xù)在原來的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到開發(fā)完畢后,再一次性合并到原來的分支上,這樣,既安全,又不影響別人工作。
首先我來創(chuàng)建一個(gè)分支
執(zhí)行命令git checkout -b dev 這樣就創(chuàng)建好了一個(gè)dev分支。
我們來介紹一下,最開始的時(shí)候我們的所有操作都是默認(rèn)在一個(gè)叫做master的分支上操作的,包括提交到遠(yuǎn)程庫,等等。關(guān)聯(lián)遠(yuǎn)程庫的時(shí)候也是從遠(yuǎn)程關(guān)聯(lián)master分支。當(dāng)我們用dev這個(gè)分支寫完一個(gè)項(xiàng)目之后,我們要把這個(gè)分支所做的工作向master分支進(jìn)行靠攏.
我們現(xiàn)在可以通過命令git branch來查看一下所有的分支。
git branch命令會列出所有分支,當(dāng)前分支前面會標(biāo)一個(gè)*號。
然后,我們就可以在dev分支上正常提交,比如對index.html做個(gè)修改,加上一行
然后我們執(zhí)行git add index.html以及 git commit –m “use the dev first”
現(xiàn)在我dev的分支工作已經(jīng)做完,現(xiàn)在我可以切換回master分支。利用命令
git checkout master
切換回master分支之后,我們發(fā)現(xiàn)index.html里面我們新加的那句話不在了。因?yàn)槲覀儎偛攀窃?/span>dev分支上做的提交?,F(xiàn)在我們要把分支合到master上,就利用命令 git merge dev就可以了,此時(shí)再去查看index.html發(fā)現(xiàn)我們在dev里面做的操作已經(jīng)在master里面了。現(xiàn)在我們可以使用命令git branch –d dev來刪除dev這個(gè)分支,之后再使用git branch來查看分支發(fā)現(xiàn)只有master一個(gè)分支了。因?yàn)閯?chuàng)建、合并和刪除分支非???,所以Git鼓勵(lì)你使用分支完成某個(gè)任務(wù),合并后再刪掉分支,這和直接在master分支上工作效果是一樣的,但過程更安全。
現(xiàn)在我們考慮這樣一種情況,我們新建了一個(gè)分支feature1,利用feature1來進(jìn)行把index.html里面再加一行,首先切換到feature1這個(gè)分支,然后修改index.html,之后提交。
然后我們切換回master分支,現(xiàn)在我們在master里的index.html里面加一句話,之后進(jìn)行提交。之后我們按照剛才的那種方式合并兩個(gè)分支。git merge feature1會發(fā)現(xiàn)有沖突出現(xiàn)
此時(shí)應(yīng)該怎么解決呢,此時(shí)必須手動(dòng)解決沖突。
在實(shí)際開發(fā)中,我們應(yīng)該按照幾個(gè)基本原則進(jìn)行分支管理:
首先,master分支應(yīng)該是非常穩(wěn)定的,也就是僅用來發(fā)布新版本,平時(shí)不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是說,dev分支是不穩(wěn)定的,到某個(gè)時(shí)候,比如1.0版本發(fā)布時(shí),再把dev分支合并到master上,在master分支發(fā)布1.0版本;
你和你的小伙伴們每個(gè)人都在dev分支上干活,每個(gè)人都有自己的分支,時(shí)不時(shí)地往dev分支上合并就可以了。
所以,團(tuán)隊(duì)合作的分支看起來就像這樣:
最后推薦一個(gè)詳細(xì)的分工合作的網(wǎng)站,一定要看。https://segmentfault.com/a/1190000002413519#articleHeader2
聯(lián)系客服