什么是git?
git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)。
git與SVN的最主要區(qū)別?
SVN是集中式版本控制系統(tǒng),版本庫是集中放在中央服務(wù)器的,而工作的時(shí)候用的都是自己的電腦,所以開始工作之前需要從中央服務(wù)器那里獲取最新的版本,然后開始工作,工作完后,需要把自己所做的工作推送到中央服務(wù)器。集中式版本控制系統(tǒng)必須要聯(lián)網(wǎng)才能工作,如果在局域網(wǎng)中,有足夠的寬帶,運(yùn)行速度夠快,而在互聯(lián)網(wǎng)環(huán)境下,網(wǎng)速慢通常會(huì)導(dǎo)致服務(wù)難以進(jìn)行。
git是分布式版本控制系統(tǒng),沒有中央服務(wù)器,每個(gè)人的電腦是一個(gè)完整的版本庫,這樣,工作的時(shí)候可不需要聯(lián)網(wǎng),因?yàn)榘姹径荚谧约弘娔X上,即每個(gè)人的電腦都有一個(gè)完整的版本庫,那么如何實(shí)現(xiàn)多人協(xié)作呢?比如自己在電腦上修改了文件A,別人也修改了文件A,此時(shí),需要把兩人之間各自所做的修改推送給對(duì)方,就可以互相看到對(duì)方所做的修改了。
在windows上安裝git。
msysgit是windows版的git,如下:

從網(wǎng)上下載一個(gè),默認(rèn)安裝即可。安裝完后,在開始菜單里找打“Git->Git Bush”如下:

會(huì)彈出一個(gè)類似命令窗口的東西,則說明git安裝成功。如下:

安裝完成之后,還需要最后一步設(shè)置,在命令行輸入git config --list,如果最后兩行信息和你之前輸入的相同,則完成了git的基本配置。

注意:git config -global參數(shù),有了這個(gè)參數(shù),表示這臺(tái)機(jī)器上所使用的git倉庫都會(huì)使用這個(gè)配置。
如何操作?
一:創(chuàng)建版本庫。
什么是版本庫?版本庫又名倉庫,英文名repository,可以簡單的理解為一個(gè)目錄,在這個(gè)目錄里面所有文件都可以被git管理起來,每個(gè)文件的修改,刪除,git都能跟蹤,以便任何時(shí)刻都可以追蹤歷史,或者在將來某個(gè)時(shí)刻將文件“還原”。
創(chuàng)建一個(gè)版本看也非常簡單,如下在D盤目錄下新建一個(gè)z6t版本庫。

pwd命令用于顯示當(dāng)前目錄。
通過命令git init把這個(gè)目錄變成git可以管理的倉庫,如下:

這時(shí)當(dāng)前目錄下會(huì)多一個(gè).git的目錄,這目錄是git用來跟蹤管理版本的,沒事千萬不要改動(dòng)里面的文件,否則會(huì)破壞git倉庫。如下:

把文件添加到版本庫中。
首先要明確,所有的版本控制系統(tǒng),只能跟蹤文本文件的改動(dòng),比如txt文件、網(wǎng)頁、所有程序的代碼等。git也不例外,版本控制系統(tǒng)可以告訴你每次所做的改動(dòng),但是圖片,視頻這些二進(jìn)制文件,雖然也能由版本控制系統(tǒng)管理,但沒法跟蹤文件的變化,只能把二進(jìn)制文件改動(dòng)串起來,也就是知道圖片從1kb變成了2kb,但是到底改了哪些地方,版本控制也不知道。
下面先看demo演示:
在版本庫z6t目錄下新建一個(gè)記事本文件readme.txt內(nèi)容如下:

第一步:使用命令git add readme.txt添加到暫存區(qū)去。如下:

如果和上面一樣,沒有任何提示,說明已經(jīng)添加成功了。
第二步:用git commit告訴git把這個(gè)文件提交到倉庫。

現(xiàn)在已經(jīng)提交了一個(gè)readme.txt文件了,-m后的內(nèi)容是代碼提交時(shí)的注釋。下面可以通過git status來查看是否還有其他文件沒有提交,如下:

說明沒有任何文件未提交,下面繼續(xù)修改readme.txt,內(nèi)容,比如添加一行內(nèi)容。

繼續(xù)使用git status來查看下結(jié)果,如下:

上面的命令告訴我們r(jià)eadme.txt文件已經(jīng)被修改,但是未被提交。注意看中間字的顏色,紅色表面還沒有提交到暫存區(qū),綠色表明已經(jīng)添加到了暫存區(qū)。
接下來想看下readme.txt到底做了什么修改,如何查看呢?使用git diff readme.txt如下:

可以看到,readme.txt文件內(nèi)容從一行變成了兩行,添加了一行下邊的內(nèi)容。
知道了對(duì)readme.txt文件做了什么修改后,就可以放心提交到倉庫了,提交修改和提交文件和第二步是一樣的(git add 和 git commit)
二:版本回退
如上,我們已經(jīng)學(xué)會(huì)了修改文件,現(xiàn)在繼續(xù)對(duì)readme.txt文件進(jìn)行修改,在增加一行,內(nèi)容如下:

繼續(xù)執(zhí)行命令如下:

現(xiàn)在對(duì)readme文件做了多次修改,下面我們查看下歷史記錄,如何查,我們可以使用git log命令。

git log命令顯示從近到遠(yuǎn)的日志,如果嫌上面顯示的信息太多,可以使用git log --pretty=oneline(千萬注意是oneline,不是online),如下所示。

現(xiàn)在我們想使用版本回退操作,回退到上一個(gè)版本,使用什么命令呢?可以使用git reset --hard HEAD^,如果想回到上上個(gè)版本只需要把HEAD^改成HEAD^^以此類推。那如果要回到100個(gè)版本前,肯定不方便,我們可以使用git reset --hard HEAD~100即可。回退之前的readme.txt內(nèi)容如下:

如果想回到上一個(gè)版本的操作命令:

可以看到已經(jīng)回到了上一個(gè)版本,可以繼續(xù)使用git log來查看下歷史記錄信息,如下:

可以看到“添加第三行的內(nèi)容”已經(jīng)看不到了,但是現(xiàn)在想回退到最新版本,我們可以通過查看版本號(hào)回退,使用命令方法如下:
git reset --hard
版本號(hào),可以通過git reflog查看版本號(hào)。

通過上面顯示我們可以知道,添加第三行的版本號(hào)是05b039a ,現(xiàn)在可以使用命令git reset --hard 05b039a 來恢復(fù),演示如下:

可以看到目前已經(jīng)是最新版本了,即處于 添加了第三行內(nèi)容 版本,查看內(nèi)容:

三:理解工作區(qū)與暫存區(qū)。
工作區(qū):就是電腦上看到的目錄,(.git隱藏目錄版本除外)。或者以后新建的目錄文件都屬于工作區(qū)范疇。
版本庫(Repository):工作區(qū)有一個(gè)隱藏的目錄.git這個(gè)不屬于工作區(qū),這個(gè)是版本庫,這里面有很多重要的文件,最重要的就是stage(暫存區(qū)),還有g(shù)it未我們自動(dòng)創(chuàng)建的第一個(gè)分支master,以及指向master的一個(gè)指針HEAD。
我們前面說過使用git提交文件到版本庫有兩步:
第一步:使用git add
把文件添加進(jìn)去,實(shí)際上就是把文件添加到暫存區(qū)。
第二步:使用git commit
提交更改,實(shí)際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支上。
我們繼續(xù)使用demo來演示下:
我們?cè)趓ead.txt再添加一行內(nèi)容(hello.js)接著在目錄下新建一個(gè)lala.txt文件,內(nèi)容(啦啦啦,啦啦啦),我們先使用git status來查看狀態(tài),如下:

現(xiàn)在使用git add 命令把兩個(gè)文件都添加到暫存區(qū)中,在使用git status來查看狀態(tài),如下:

已經(jīng)添加到暫存區(qū)的為綠色字體,未添加的為紅色字體。
接著我們可以git commit
一次性提交到分支上,如下:

四:git撤銷修改和刪除文件操作。
比我現(xiàn)在在readme.txt文件里面增加一行內(nèi)容為(惟沉默是最高的輕蔑。),我們先通過命令查看如下:

在提交之前,我發(fā)現(xiàn)添加的(惟沉默是最高的輕蔑。)內(nèi)容有誤,所以我得馬上恢復(fù)以前的版本,現(xiàn)在我可以有如下的幾種方法可以做修改:
第一:如果我知道要?jiǎng)h掉那些內(nèi)容的話,直接手動(dòng)更改去掉那些需要的文件,然后add添加到暫存區(qū),然后commit掉
第二:我可以按以前的方法直接恢復(fù)到上一個(gè)版本。使用git reset --hard HEAD^
但是現(xiàn)在我不想使用上面這兩種方法。接著撤銷該怎么操作呢?首先在做撤銷之前,使用git status查看當(dāng)前的狀態(tài)。如下所示:顯示已經(jīng)修改,但沒有添加到暫存區(qū)。

可以發(fā)現(xiàn),git會(huì)告訴你,git checkout -- file可以丟棄工作區(qū)的修改,如下命令:
git checkout -- readme.txt
(注意文件名前面必須有空格)

命令git checkout -- readme.txt
意思就是把readme.txt文件在工作區(qū)做的修改全部撤銷,這里有2種情況,如下:
readme.txt自動(dòng)修改后,還沒有到暫存區(qū),使用撤銷修改就回到和版本庫一模一樣的狀態(tài)。另一種情況就是readme.txt已經(jīng)進(jìn)人暫存區(qū)了,接著又做了修改,撤銷修改就回到添加暫存區(qū)后的狀態(tài)。
對(duì)于上面的第二種情況,繼續(xù)做demo來看下,假如對(duì)readme.txt添加一行內(nèi)容為(猛獸總是獨(dú)行,牛羊才成群結(jié)隊(duì)。)

使用git add
添加到暫存區(qū)后,接著添加內(nèi)容(從來如此,便對(duì)么?)通過撤銷命令后讓其回到暫存區(qū)的狀態(tài),如下所示:

注意:命令git checkout -- readme.txt中的--很重要,如果沒有--的話,那么命令就變成了創(chuàng)建分支了。
二:刪除文件
假如在版本z6t目錄中添加一個(gè)文件666.txt,然后提交。如下:

如上:一般情況下,可以直接在文件目錄中把文件刪了,或者使用如上rm命令:rm 666.txt,如果想要在版本庫中徹底刪掉此文件,可以再執(zhí)行commit命令提交掉,現(xiàn)在的文件目錄是這樣的:

只有沒有commit,如果想在版本庫中恢復(fù)此文件如何操作呢?
可以使用如下命令 git checkout -- b.txt,
如下所示:

在來看文件目錄,添加了666.txt
文件了,如下所示:

五:遠(yuǎn)程倉庫
在了解之前,先注冊(cè)github賬號(hào),由于你的git倉庫和github倉庫之間的傳輸是通過SSH加密的,所以需要一點(diǎn)設(shè)置。
第一步:創(chuàng)建SSH Key。在用戶目錄下,看看有沒有.SSH目錄,如果有,在看看這個(gè)目錄下有沒有id_rsa和id_rsa.pub這兩個(gè)文件,如果有的話,直接跳過此如下命令,如果沒有的話,打開命令行,輸入如下命令:
ssh-keygen -t rsa -C “youemail@example.com”

結(jié)果如下所示:

Id_ras是私匙,不能泄露出去,id_rsa.pub是公匙,可以放心地告訴任何人。
第二步:登錄github,打開“settings”中的SSH Keys頁面,然后點(diǎn)擊“Add SSH Key”填上任意title,在Key文本框里黏貼id_rsa.pub文件的內(nèi)容。

點(diǎn)擊 Add keys,你就應(yīng)該可以看到已經(jīng)添加的key。

如何添加遠(yuǎn)程庫?
現(xiàn)在的情景是:我們已經(jīng)在本地創(chuàng)建了一個(gè)git倉庫,又想在github創(chuàng)建一個(gè)git倉庫,并希望這兩個(gè)倉庫進(jìn)行遠(yuǎn)程同步,這樣github的倉庫可以作為備份,其他人又可以通過該倉庫來協(xié)作。
首先登陸github上,然后右上角找到“create a new repo”創(chuàng)建一個(gè)新的倉庫。如下:

目前,在github上的這個(gè)testgit倉庫還是空的,github告訴我們,可以從這個(gè)倉庫克隆出新的倉庫,也可以把一個(gè)已有的本地倉庫與之關(guān)聯(lián),然后,把本地倉庫的內(nèi)容推送到github倉庫。
現(xiàn)在,根據(jù)github的提示,在本地倉庫下運(yùn)行以下命令,輸入github用戶名,密碼:
Git remote add origin https://github.com/xz9594/testgit.git

把本地庫的內(nèi)容推送到遠(yuǎn)程,使用git push命令,實(shí)際上就是把當(dāng)前分支master推送到遠(yuǎn)程。由于遠(yuǎn)程庫是空的,第一次提交時(shí)加上了-u參數(shù),git不但會(huì)把本地的master分支內(nèi)容推送到新的master分支,還會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,在以后的推送或者拉取時(shí)就可以簡化命令。推送成功后,可以立刻在github頁面中看到遠(yuǎn)程庫的內(nèi)容已經(jīng)和本地一模一樣了,如下所示:

從現(xiàn)在起,只要本地做了提交,就可以通過如下命令:

把本地master分支的最新修改推送到github上了,現(xiàn)在你就擁有了真正的分布式版本庫了。
如何從遠(yuǎn)程庫克隆?
上面我們了解了先有本地庫,后有遠(yuǎn)程庫,如何管理遠(yuǎn)程庫。現(xiàn)在我們想,假如遠(yuǎn)程庫有新的內(nèi)容了,我想克隆到本地來,如何克隆呢?
首先登陸github,創(chuàng)建一個(gè)新的倉庫,名字叫做testDemo,如下:

現(xiàn)在,遠(yuǎn)程庫已經(jīng)準(zhǔn)備好了,下一步就是使用git clone命令克隆一個(gè)本地庫了,如下所示:

接著在本地目錄下生成了testDemo目錄了,如下所示:

六:創(chuàng)建與合并分支。
在版本回退那里,已經(jīng)知道每次提交,git都會(huì)把他們串成一條時(shí)間線,這條時(shí)間線就是一個(gè)分支。截止到目前,只有一條時(shí)間線,在git里,這個(gè)分支叫主分支,即master。HEAD嚴(yán)格來說不是指向提交,而是指向master,master才是指向提交,所以,HEAD指向的就是當(dāng)前分支,切換分支即可以理解為切換時(shí)間線。
首先,我們創(chuàng)建dev分支,然后切換到dev分支上。如下操作:

git checkout 命令加上-b參數(shù)表示創(chuàng)建并切換,相當(dāng)于如下2條命令
git branck dev
Git checkout dev
Git branck查看分支,會(huì)列出所有當(dāng)前分支,當(dāng)前分支前面會(huì)添加星號(hào),然后我們?cè)赿ev分支上繼續(xù)做demo,比如我們?cè)趓eadme.txt再增加一行 keep foolish

在kobe分支添加并提交readme.txt

查看readme.txt

此時(shí)切換到master分支并查看readme.txt

合并kobe分支,git merge kobe:

git merge命令用于合并制定分支到當(dāng)前分支上,合并后,再查看readme.txt內(nèi)容,可以看到,和dev分支最新提交的是完全一樣的,注意上面的Fast-forward信息,git告訴我們,這次合并是“快進(jìn)模式”,也就是把master指向dev的當(dāng)前提交,所以合并速度非常快。合并完成之后,就可以刪除dev分支了,操作如下:git branch -d dev

如何解決沖突?
首先創(chuàng)建一個(gè)新分支,比如名字叫做james,在readme.txt添加一行內(nèi)容keep hungry,然后提交,如下所示:

同樣,現(xiàn)在切換到master分支上來,查看此時(shí)的內(nèi)容為keep hungry的內(nèi)容,如下:

此時(shí)在readme.txt的最后添加一行內(nèi)容,內(nèi)容為keep healthy如下所示:

在add和commit readme.txt后需要在master分支上合并james,如下:

我們?cè)賮砜聪聄eadme.txt的內(nèi)容如下:


Git 用,====,>>>>>標(biāo)記出不同分支的內(nèi)容,其中>>>分支上修改內(nèi)容后保存:

查看分支合并情況,使用git log 如下:

3.分支管理策略
通常合并分支時(shí),git一般使用的是“Fast forward”模式,在這種模式下,刪除分支后會(huì)丟掉分支信息,現(xiàn)在使用帶參數(shù) --no-ff來禁用“fast forward”模式。看下面demo演示:
創(chuàng)建一個(gè)kobe分支。修改readme.txt的內(nèi)容。添加到暫存區(qū)。切換回主分支(master)。合并dev分支,使用命令git merge --no-ff -m “注釋” dev查看歷史記錄


右上圖可見,刪除了“這是一個(gè)demo”(在kobe分支做的操作)分支后,原來的版本信息還存在。
分支策略:首先master主分支應(yīng)該是非常穩(wěn)定的,也就是用來發(fā)布新版本,一般情況下不允許在上面干活,干活一般情況在新建的dev分支上,干完后,比如要發(fā)布,或者說分支代碼穩(wěn)定后可以合并到主分支master上來。
七:bug分支:
在開發(fā)中,會(huì)經(jīng)常碰到bug問題,那么有了bug就需要修復(fù),在git中,分支是很強(qiáng)大的額,每個(gè)bug都可以通過一個(gè)臨時(shí)分支來修復(fù),修復(fù)完成后,合并分支,然后將臨時(shí)分支刪除掉。
比如在開發(fā)中遇到一個(gè)404 bug的時(shí)候,我們可以創(chuàng)建一個(gè)404分支來修復(fù)它,但是,當(dāng)前dev分支上
Git基本常用命令如下:
mkdir: XX(創(chuàng)建一個(gè)空目錄XX指目錄名)
pwd: 顯示當(dāng)前目錄的路徑
git init 把當(dāng)前的目錄變成可以管理的git倉庫,生成隱藏的.git文件。
git add XX 把XX文件添加到暫存區(qū)。
git commit -m “XX” 提交文件 -m后面的是注釋
git status 查看倉庫狀態(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ū)的修改全部撤銷
git rm XX 刪除XX文件
git remote add origin https://github.com/xz9594/testgit.git 關(guān)聯(lián)一個(gè)遠(yuǎn)程庫
git push -u (第一次提交要用-u以后不需要)origin master把當(dāng)前master分支推送到遠(yuǎn)程庫
git clone https://github.com/xz9594/testgit.git 從遠(yuǎn)程庫中克隆
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)前的工作隱藏起來等以后恢復(fù)現(xiàn)場后繼續(xù)工作
git stash list 查看所有被隱藏的文件列表
git stash apply 恢復(fù)被隱藏的文件,但是內(nèi)容不刪除
git stash drop刪除文件
git stash pop 恢復(fù)文件的同時(shí)也刪除文件
git remote 查看遠(yuǎn)程庫的信息
git remote -v 查看遠(yuǎn)程庫的詳細(xì)信息
git push origin master Git會(huì)把master分支推送到遠(yuǎn)程庫對(duì)應(yīng)的遠(yuǎn)程分支上
git 還原push
1. git log
2. git reset --soft 43dc0de914173a1a8793a7eac31dbb26057bbee4
3. git push origin master --force
到此這篇關(guān)于詳解git的基本使用方法的文章就介紹到這了,更多相關(guān)git使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Git入門【推薦】
- GitHub入門教程 手把手教你最簡單的開源項(xiàng)目托管
- Git 教程簡單入門介紹