什么是git?
git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)。
git與SVN的最主要區(qū)別?
SVN是集中式版本控制系統(tǒng),版本庫是集中放在中央服務(wù)器的,而工作的時候用的都是自己的電腦,所以開始工作之前需要從中央服務(wù)器那里獲取最新的版本,然后開始工作,工作完后,需要把自己所做的工作推送到中央服務(wù)器。集中式版本控制系統(tǒng)必須要聯(lián)網(wǎng)才能工作,如果在局域網(wǎng)中,有足夠的寬帶,運行速度夠快,而在互聯(lián)網(wǎng)環(huán)境下,網(wǎng)速慢通常會導(dǎo)致服務(wù)難以進(jìn)行。
git是分布式版本控制系統(tǒng),沒有中央服務(wù)器,每個人的電腦是一個完整的版本庫,這樣,工作的時候可不需要聯(lián)網(wǎng),因為版本都在自己電腦上,即每個人的電腦都有一個完整的版本庫,那么如何實現(xiàn)多人協(xié)作呢?比如自己在電腦上修改了文件A,別人也修改了文件A,此時,需要把兩人之間各自所做的修改推送給對方,就可以互相看到對方所做的修改了。
在windows上安裝git。
msysgit是windows版的git,如下:
從網(wǎng)上下載一個,默認(rèn)安裝即可。安裝完后,在開始菜單里找打“Git->Git Bush”如下:
會彈出一個類似命令窗口的東西,則說明git安裝成功。如下:
安裝完成之后,還需要最后一步設(shè)置,在命令行輸入git config --list,如果最后兩行信息和你之前輸入的相同,則完成了git的基本配置。
注意:git config -global參數(shù),有了這個參數(shù),表示這臺機(jī)器上所使用的git倉庫都會使用這個配置。
如何操作?
一:創(chuàng)建版本庫。
什么是版本庫?版本庫又名倉庫,英文名repository,可以簡單的理解為一個目錄,在這個目錄里面所有文件都可以被git管理起來,每個文件的修改,刪除,git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻將文件“還原”。
創(chuàng)建一個版本看也非常簡單,如下在D盤目錄下新建一個z6t版本庫。
pwd命令用于顯示當(dāng)前目錄。
通過命令git init把這個目錄變成git可以管理的倉庫,如下:
這時當(dāng)前目錄下會多一個.git的目錄,這目錄是git用來跟蹤管理版本的,沒事千萬不要改動里面的文件,否則會破壞git倉庫。如下:
把文件添加到版本庫中。
首先要明確,所有的版本控制系統(tǒng),只能跟蹤文本文件的改動,比如txt文件、網(wǎng)頁、所有程序的代碼等。git也不例外,版本控制系統(tǒng)可以告訴你每次所做的改動,但是圖片,視頻這些二進(jìn)制文件,雖然也能由版本控制系統(tǒng)管理,但沒法跟蹤文件的變化,只能把二進(jìn)制文件改動串起來,也就是知道圖片從1kb變成了2kb,但是到底改了哪些地方,版本控制也不知道。
下面先看demo演示:
在版本庫z6t目錄下新建一個記事本文件readme.txt內(nèi)容如下:
第一步:使用命令git add readme.txt添加到暫存區(qū)去。如下:
如果和上面一樣,沒有任何提示,說明已經(jīng)添加成功了。
第二步:用git commit告訴git把這個文件提交到倉庫。
現(xiàn)在已經(jīng)提交了一個readme.txt文件了,-m后的內(nèi)容是代碼提交時的注釋。下面可以通過git status來查看是否還有其他文件沒有提交,如下:
說明沒有任何文件未提交,下面繼續(xù)修改readme.txt,內(nèi)容,比如添加一行內(nèi)容。
繼續(xù)使用git status來查看下結(jié)果,如下:
上面的命令告訴我們readme.txt文件已經(jīng)被修改,但是未被提交。注意看中間字的顏色,紅色表面還沒有提交到暫存區(qū),綠色表明已經(jīng)添加到了暫存區(qū)。
接下來想看下readme.txt到底做了什么修改,如何查看呢?使用git diff readme.txt如下:
可以看到,readme.txt文件內(nèi)容從一行變成了兩行,添加了一行下邊的內(nèi)容。
知道了對readme.txt文件做了什么修改后,就可以放心提交到倉庫了,提交修改和提交文件和第二步是一樣的(git add 和 git commit)
二:版本回退
如上,我們已經(jīng)學(xué)會了修改文件,現(xiàn)在繼續(xù)對readme.txt文件進(jìn)行修改,在增加一行,內(nèi)容如下:
繼續(xù)執(zhí)行命令如下:
現(xiàn)在對readme文件做了多次修改,下面我們查看下歷史記錄,如何查,我們可以使用git log命令。
git log命令顯示從近到遠(yuǎn)的日志,如果嫌上面顯示的信息太多,可以使用git log --pretty=oneline(千萬注意是oneline,不是online),如下所示。
現(xiàn)在我們想使用版本回退操作,回退到上一個版本,使用什么命令呢?可以使用git reset --hard HEAD^,如果想回到上上個版本只需要把HEAD^改成HEAD^^以此類推。那如果要回到100個版本前,肯定不方便,我們可以使用git reset --hard HEAD~100即可?;赝酥暗膔eadme.txt內(nèi)容如下:
如果想回到上一個版本的操作命令:
可以看到已經(jīng)回到了上一個版本,可以繼續(xù)使用git log來查看下歷史記錄信息,如下:
可以看到“添加第三行的內(nèi)容”已經(jīng)看不到了,但是現(xiàn)在想回退到最新版本,我們可以通過查看版本號回退,使用命令方法如下:
git reset --hard
版本號,可以通過git reflog查看版本號。
通過上面顯示我們可以知道,添加第三行的版本號是05b039a ,現(xiàn)在可以使用命令git reset --hard 05b039a 來恢復(fù),演示如下:
可以看到目前已經(jīng)是最新版本了,即處于 添加了第三行內(nèi)容 版本,查看內(nèi)容:
三:理解工作區(qū)與暫存區(qū)。
工作區(qū):就是電腦上看到的目錄,(.git隱藏目錄版本除外)?;蛘咭院笮陆ǖ哪夸浳募紝儆诠ぷ鲄^(qū)范疇。
版本庫(Repository):工作區(qū)有一個隱藏的目錄.git這個不屬于工作區(qū),這個是版本庫,這里面有很多重要的文件,最重要的就是stage(暫存區(qū)),還有g(shù)it未我們自動創(chuàng)建的第一個分支master,以及指向master的一個指針HEAD。
我們前面說過使用git提交文件到版本庫有兩步:
第一步:使用git add
把文件添加進(jìn)去,實際上就是把文件添加到暫存區(qū)。
第二步:使用git commit
提交更改,實際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支上。
我們繼續(xù)使用demo來演示下:
我們在read.txt再添加一行內(nèi)容(hello.js)接著在目錄下新建一個lala.txt文件,內(nèi)容(啦啦啦,啦啦啦),我們先使用git status來查看狀態(tài),如下:
現(xiàn)在使用git add 命令把兩個文件都添加到暫存區(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)在我可以有如下的幾種方法可以做修改:
第一:如果我知道要刪掉那些內(nèi)容的話,直接手動更改去掉那些需要的文件,然后add添加到暫存區(qū),然后commit掉
第二:我可以按以前的方法直接恢復(fù)到上一個版本。使用git reset --hard HEAD^
但是現(xiàn)在我不想使用上面這兩種方法。接著撤銷該怎么操作呢?首先在做撤銷之前,使用git status查看當(dāng)前的狀態(tài)。如下所示:顯示已經(jīng)修改,但沒有添加到暫存區(qū)。
可以發(fā)現(xiàn),git會告訴你,git checkout -- file可以丟棄工作區(qū)的修改,如下命令:
git checkout -- readme.txt
(注意文件名前面必須有空格)
命令git checkout -- readme.txt
意思就是把readme.txt文件在工作區(qū)做的修改全部撤銷,這里有2種情況,如下:
readme.txt自動修改后,還沒有到暫存區(qū),使用撤銷修改就回到和版本庫一模一樣的狀態(tài)。另一種情況就是readme.txt已經(jīng)進(jìn)人暫存區(qū)了,接著又做了修改,撤銷修改就回到添加暫存區(qū)后的狀態(tài)。
對于上面的第二種情況,繼續(xù)做demo來看下,假如對readme.txt添加一行內(nèi)容為(猛獸總是獨行,牛羊才成群結(jié)隊。)
使用git add
添加到暫存區(qū)后,接著添加內(nèi)容(從來如此,便對么?)通過撤銷命令后讓其回到暫存區(qū)的狀態(tài),如下所示:
注意:命令git checkout -- readme.txt中的--很重要,如果沒有--的話,那么命令就變成了創(chuàng)建分支了。
二:刪除文件
假如在版本z6t目錄中添加一個文件666.txt,然后提交。如下:
如上:一般情況下,可以直接在文件目錄中把文件刪了,或者使用如上rm命令:rm 666.txt,如果想要在版本庫中徹底刪掉此文件,可以再執(zhí)行commit命令提交掉,現(xiàn)在的文件目錄是這樣的:
只有沒有commit,如果想在版本庫中恢復(fù)此文件如何操作呢?
可以使用如下命令 git checkout -- b.txt,
如下所示:
在來看文件目錄,添加了666.txt
文件了,如下所示:
五:遠(yuǎn)程倉庫
在了解之前,先注冊github賬號,由于你的git倉庫和github倉庫之間的傳輸是通過SSH加密的,所以需要一點設(shè)置。
第一步:創(chuàng)建SSH Key。在用戶目錄下,看看有沒有.SSH目錄,如果有,在看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果有的話,直接跳過此如下命令,如果沒有的話,打開命令行,輸入如下命令:
ssh-keygen -t rsa -C “youemail@example.com”
結(jié)果如下所示:
Id_ras是私匙,不能泄露出去,id_rsa.pub是公匙,可以放心地告訴任何人。
第二步:登錄github,打開“settings”中的SSH Keys頁面,然后點擊“Add SSH Key”填上任意title,在Key文本框里黏貼id_rsa.pub文件的內(nèi)容。
點擊 Add keys,你就應(yīng)該可以看到已經(jīng)添加的key。
如何添加遠(yuǎn)程庫?
現(xiàn)在的情景是:我們已經(jīng)在本地創(chuàng)建了一個git倉庫,又想在github創(chuàng)建一個git倉庫,并希望這兩個倉庫進(jìn)行遠(yuǎn)程同步,這樣github的倉庫可以作為備份,其他人又可以通過該倉庫來協(xié)作。
首先登陸github上,然后右上角找到“create a new repo”創(chuàng)建一個新的倉庫。如下:
目前,在github上的這個testgit倉庫還是空的,github告訴我們,可以從這個倉庫克隆出新的倉庫,也可以把一個已有的本地倉庫與之關(guān)聯(lián),然后,把本地倉庫的內(nèi)容推送到github倉庫。
現(xiàn)在,根據(jù)github的提示,在本地倉庫下運行以下命令,輸入github用戶名,密碼:
Git remote add origin https://github.com/xz9594/testgit.git
把本地庫的內(nèi)容推送到遠(yuǎn)程,使用git push命令,實際上就是把當(dāng)前分支master推送到遠(yuǎn)程。由于遠(yuǎn)程庫是空的,第一次提交時加上了-u參數(shù),git不但會把本地的master分支內(nèi)容推送到新的master分支,還會把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,在以后的推送或者拉取時就可以簡化命令。推送成功后,可以立刻在github頁面中看到遠(yuǎn)程庫的內(nèi)容已經(jīng)和本地一模一樣了,如下所示:
從現(xiàn)在起,只要本地做了提交,就可以通過如下命令:
把本地master分支的最新修改推送到github上了,現(xiàn)在你就擁有了真正的分布式版本庫了。
如何從遠(yuǎn)程庫克隆?
上面我們了解了先有本地庫,后有遠(yuǎn)程庫,如何管理遠(yuǎn)程庫?,F(xiàn)在我們想,假如遠(yuǎn)程庫有新的內(nèi)容了,我想克隆到本地來,如何克隆呢?
首先登陸github,創(chuàng)建一個新的倉庫,名字叫做testDemo,如下:
現(xiàn)在,遠(yuǎn)程庫已經(jīng)準(zhǔn)備好了,下一步就是使用git clone命令克隆一個本地庫了,如下所示:
接著在本地目錄下生成了testDemo目錄了,如下所示:
六:創(chuàng)建與合并分支。
在版本回退那里,已經(jīng)知道每次提交,git都會把他們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在git里,這個分支叫主分支,即master。HEAD嚴(yán)格來說不是指向提交,而是指向master,master才是指向提交,所以,HEAD指向的就是當(dāng)前分支,切換分支即可以理解為切換時間線。
首先,我們創(chuàng)建dev分支,然后切換到dev分支上。如下操作:
git checkout 命令加上-b參數(shù)表示創(chuàng)建并切換,相當(dāng)于如下2條命令
git branck dev
Git checkout dev
Git branck查看分支,會列出所有當(dāng)前分支,當(dāng)前分支前面會添加星號,然后我們在dev分支上繼續(xù)做demo,比如我們在readme.txt再增加一行 keep foolish
在kobe分支添加并提交readme.txt
查看readme.txt
此時切換到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)建一個新分支,比如名字叫做james,在readme.txt添加一行內(nèi)容keep hungry,然后提交,如下所示:
同樣,現(xiàn)在切換到master分支上來,查看此時的內(nèi)容為keep hungry的內(nèi)容,如下:
此時在readme.txt的最后添加一行內(nèi)容,內(nèi)容為keep healthy如下所示:
在add和commit readme.txt后需要在master分支上合并james,如下:
我們再來看下readme.txt的內(nèi)容如下:
Git 用,====,>>>>>標(biāo)記出不同分支的內(nèi)容,其中>>>分支上修改內(nèi)容后保存:
查看分支合并情況,使用git log 如下:
3.分支管理策略
通常合并分支時,git一般使用的是“Fast forward”模式,在這種模式下,刪除分支后會丟掉分支信息,現(xiàn)在使用帶參數(shù) --no-ff來禁用“fast forward”模式??聪旅鎑emo演示:
創(chuàng)建一個kobe分支。修改readme.txt的內(nèi)容。添加到暫存區(qū)。切換回主分支(master)。合并dev分支,使用命令git merge --no-ff -m “注釋” dev查看歷史記錄
右上圖可見,刪除了“這是一個demo”(在kobe分支做的操作)分支后,原來的版本信息還存在。
分支策略:首先master主分支應(yīng)該是非常穩(wěn)定的,也就是用來發(fā)布新版本,一般情況下不允許在上面干活,干活一般情況在新建的dev分支上,干完后,比如要發(fā)布,或者說分支代碼穩(wěn)定后可以合并到主分支master上來。
七:bug分支:
在開發(fā)中,會經(jīng)常碰到bug問題,那么有了bug就需要修復(fù),在git中,分支是很強(qiáng)大的額,每個bug都可以通過一個臨時分支來修復(fù),修復(fù)完成后,合并分支,然后將臨時分支刪除掉。
比如在開發(fā)中遇到一個404 bug的時候,我們可以創(chuàng)建一個404分支來修復(fù)它,但是,當(dāng)前dev分支上
Git基本常用命令如下:
mkdir: XX(創(chuàng)建一個空目錄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~ 回退到上一個版本 (如果想回退到100個版本,使用git reset -hard HEAD~100)
cat XX 查看XX文件內(nèi)容
git reflog 查看歷史記錄的版本號id
git checkout --XX 把XX文件在工作區(qū)的修改全部撤銷
git rm XX 刪除XX文件
git remote add origin https://github.com/xz9594/testgit.git 關(guān)聯(lián)一個遠(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ù)文件的同時也刪除文件
git remote 查看遠(yuǎn)程庫的信息
git remote -v 查看遠(yuǎn)程庫的詳細(xì)信息
git push origin master Git會把master分支推送到遠(yuǎn)程庫對應(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Git入門【推薦】
- GitHub入門教程 手把手教你最簡單的開源項目托管
- Git 教程簡單入門介紹