原文鏈接
Git使用教程--最詳細巨税、最傻瓜、最淺顯粉臊、真正手把手教草添!(一)
Git使用教程--最詳細、最傻瓜扼仲、最淺顯远寸、真正手把手教!(二)
一犀盟、Git是什么
Git是目前世界上最先進的分布式版本控制系統(tǒng)而晒。
工作原理 / 流程:
- Workspace:工作區(qū)
- Index / Stage:暫存區(qū)
- Repository:倉庫區(qū)(或本地倉庫)
- Remote:遠程倉庫
二、SVN與Git的最主要的區(qū)別阅畴?
SVN是集中式版本控制系統(tǒng)倡怎,版本庫是集中放在中央服務(wù)器的,而干活的時候贱枣,用的都是自己的電腦监署,所以首先要從中央服務(wù)器哪里得到最新的版本,然后干活纽哥,干完后钠乏,需要把自己做完的活推送到中央服務(wù)器。集中式版本控制系統(tǒng)是必須聯(lián)網(wǎng)才能工作春塌,如果在局域網(wǎng)還可以晓避,帶寬夠大,速度夠快只壳,如果在互聯(lián)網(wǎng)下俏拱,如果網(wǎng)速慢的話,就納悶了吼句。
Git是分布式版本控制系統(tǒng)锅必,那么它就沒有中央服務(wù)器的,每個人的電腦就是一個完整的版本庫惕艳,這樣搞隐,工作的時候就不需要聯(lián)網(wǎng)了驹愚,因為版本都是在自己的電腦上。既然每個人的電腦都有一個完整的版本庫劣纲,那多個人如何協(xié)作呢逢捺?比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A味廊,這時蒸甜,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了余佛。
三、在windows上如何安裝Git窍荧?
需要從網(wǎng)上下載一個msysgit辉巡,然后進行默認安裝即可。安裝完成后蕊退,在開始菜單里面找到 "Git --> Git Bash"郊楣,會彈出一個類似的命令窗口的東西,就說明Git安裝成功瓤荔。安裝完成后净蚤,還需要最后一步設(shè)置,在命令行輸入如下:
因為Git是分布式版本控制系統(tǒng)输硝,所以需要填寫用戶名和郵箱作為一個標識今瀑。
注意:git config --global 參數(shù),有了這個參數(shù)点把,表示你這臺機器上所有的Git倉庫都會使用這個配置橘荠,當(dāng)然你也可以對某個倉庫指定的不同的用戶名和郵箱。
四郎逃、如何操作哥童?
1. 創(chuàng)建版本庫
什么是版本庫?版本庫又名倉庫褒翰,英文名repository,你可以簡單的理解一個目錄贮懈,這個目錄里面的所有文件都可以被Git管理起來,每個文件的修改优训,刪除朵你,Git都能跟蹤,以便任何時刻都可以追蹤歷史型宙,或者在將來某個時刻還可以將文件”還原”撬呢。
所以創(chuàng)建一個版本庫也非常簡單,如下我是D盤 –> www下 目錄下新建一個testgit版本庫妆兑。
pwd 命令是用于顯示當(dāng)前的目錄魂拦。
通過命令 git init 把這個目錄變成git可以管理的倉庫毛仪,如下:
這時候你當(dāng)前testgit目錄下會多了一個.git的目錄,這個目錄是Git來跟蹤管理版本的芯勘,沒事千萬不要手動亂改這個目錄里面的文件箱靴,否則,會把git倉庫給破壞了荷愕。如下:
下面先看下demo如下演示:
我在版本庫testgit目錄下新建一個記事本文件 readme.txt 內(nèi)容如下:11111111
第一步:使用命令 git add readme.txt添加到暫存區(qū)里面去衡怀。如下:
如果和上面一樣,沒有任何提示安疗,說明已經(jīng)添加成功了抛杨。
第二步:用命令 git commit告訴Git,把文件提交到倉庫荐类。
現(xiàn)在我們已經(jīng)提交了一個readme.txt文件了怖现,我們下面可以通過命令git status來查看是否還有文件未提交,如下:
說明沒有任何文件未提交玉罐,但是我現(xiàn)在繼續(xù)來改下readme.txt內(nèi)容屈嗤,比如我在下面添加一行2222222222內(nèi)容,繼續(xù)使用git status來查看下結(jié)果吊输,如下:
上面的命令告訴我們 readme.txt文件已被修改饶号,但是未被提交的修改。把文件添加到版本庫中季蚂。
首先要明確下茫船,所有的版本控制系統(tǒng),只能跟蹤文本文件的改動癣蟋,比如txt文件透硝,網(wǎng)頁,所有程序的代碼等疯搅,Git也不列外濒生,版本控制系統(tǒng)可以告訴你每次的改動,但是圖片幔欧,視頻這些二進制文件罪治,雖能也能由版本控制系統(tǒng)管理,但沒法跟蹤文件的變化礁蔗,只能把二進制文件每次改動串起來觉义,也就是知道圖片從1kb變成2kb,但是到底改了啥浴井,版本控制也不知道晒骇。
接下來我想看下readme.txt文件到底改了什么內(nèi)容,如何查看呢?可以使用如下命令:
如上可以看到洪囤,readme.txt文件內(nèi)容從一行11111111改成 二行 添加了一行22222222內(nèi)容徒坡。
知道了對readme.txt文件做了什么修改后,我們可以放心的提交到倉庫了瘤缩,提交修改和提交文件是一樣的2步(第一步是git add ,第二步是:git commit)喇完。
2. 版本回退
如上,我們已經(jīng)學(xué)會了修改文件剥啤,現(xiàn)在我繼續(xù)對readme.txt文件進行修改锦溪,再增加一行
內(nèi)容為33333333333333.繼續(xù)執(zhí)行命令如下:
現(xiàn)在我已經(jīng)對readme.txt文件做了三次修改了,那么我現(xiàn)在想查看下歷史記錄府怯,如何查呢刻诊?我們現(xiàn)在可以使用命令 git log 演示如下所示:
git log命令顯示從最近到最遠的顯示日志,我們可以看到最近三次提交牺丙,最近的一次是,增加內(nèi)容為333333.上一次是添加內(nèi)容222222坏逢,第一次默認是 111111.如果嫌上面顯示的信息太多的話,我們可以使用命令 git log –pretty=oneline 演示如下:
現(xiàn)在我想使用版本回退操作赘被,我想把當(dāng)前的版本回退到上一個版本,要使用什么命令呢肖揣?可以使用如下2種命令民假,第一種是:git reset --hard HEAD^ , 那么如果要回退到上上個版本只需把HEAD^ 改成 HEAD^^ 以此類推龙优。那如果要回退到前100個版本的話羊异,使用上面的方法肯定不方便,我們可以使用下面的簡便命令操作:git reset --hard HEAD~100 即可彤断。未回退之前的readme.txt內(nèi)容如下:
如果想回退到上一個版本的命令如下操作:
再來查看下 readme.txt內(nèi)容如下:通過命令cat readme.txt查看:
可以看到野舶,內(nèi)容已經(jīng)回退到上一個版本了。我們可以繼續(xù)使用git log 來查看下歷史記錄信息宰衙,如下:
我們看到增加333333 內(nèi)容我們沒有看到了平道,但是現(xiàn)在我想回退到最新的版本,如:有333333的內(nèi)容要如何恢復(fù)呢供炼?我們可以通過版本號回退一屋,使用命令方法如下
git reset --hard 版本號 ,但是現(xiàn)在的問題假如我已經(jīng)關(guān)掉過一次命令行或者333內(nèi)容的版本號我并不知道呢袋哼?要如何知道增加3333內(nèi)容的版本號呢冀墨?可以通過如下命令即可獲取到版本號:git reflog 演示如下:
通過上面的顯示我們可以知道,增加內(nèi)容3333的版本號是 6fcfc89.我們現(xiàn)在可以命令
git reset --hard 6fcfc89來恢復(fù)了涛贯。演示如下:
可以看到诽嘉,目前已經(jīng)是最新的版本了。
3. 理解工作區(qū)與暫存區(qū)的區(qū)別?
工作區(qū):就是你在電腦上看到的目錄虫腋,比如目錄下testgit里的文件(.git隱藏目錄版本庫除外)骄酗。或者以后需要再新建的目錄文件等等都屬于工作區(qū)范疇岔乔。
版本庫(Repository):工作區(qū)有一個隱藏目錄.git,這個不屬于工作區(qū)酥筝,這是版本庫。其中版本庫里面存了很多東西雏门,其中最重要的就是stage(暫存區(qū))嘿歌,還有Git為我們自動創(chuàng)建了第一個分支master,以及指向master的一個指針HEAD。
我們前面說過使用Git提交文件到版本庫有兩步:
第一步:是使用 git add 把文件添加進去茁影,實際上就是把文件添加到暫存區(qū)宙帝。
第二步:使用git commit提交更改,實際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支上募闲。
我們繼續(xù)使用demo來演示下:
我們在readme.txt再添加一行內(nèi)容為4444444步脓,接著在目錄下新建一個文件為test.txt 內(nèi)容為test,我們先用命令 git status來查看下狀態(tài)浩螺,如下:
現(xiàn)在我們先使用git add 命令把2個文件都添加到暫存區(qū)中靴患,再使用git status來查看下狀態(tài),如下:
接著我們可以使用git commit一次性提交到分支上要出,如下:
4. Git撤銷修改和刪除文件操作
1. 撤銷修改
比如我現(xiàn)在在readme.txt文件里面增加一行鸳君, 內(nèi)容為555555555555,我們先通過命令查看如下:
在我未提交之前患蹂,我發(fā)現(xiàn)添加5555555555555內(nèi)容有誤或颊,所以我得馬上恢復(fù)以前的版本,現(xiàn)在我可以有如下幾種方法可以做修改:
- 如果我知道要刪掉那些內(nèi)容的話传于,直接手動更改去掉那些需要的文件囱挑,然后add添加到暫存區(qū),最后commit掉沼溜。
- 我可以按以前的方法直接恢復(fù)到上一個版本平挑。使用 git reset --hard HEAD^
但是現(xiàn)在我不想使用上面的2種方法,我想直接想使用撤銷命令該如何操作呢盛末?首先在做撤銷之前弹惦,我們可以先用 git status 查看下當(dāng)前的狀態(tài)。如下所示:
命令 git checkout --readme.txt 意思就是悄但,把readme.txt文件在工作區(qū)做的修改全部撤銷棠隐,這里有2種情況,如下:
- readme.txt自動修改后檐嚣,還沒有放到暫存區(qū)助泽,使用 撤銷修改就回到和版本庫一模一樣的狀態(tài)啰扛。
- 另外一種是readme.txt已經(jīng)放入暫存區(qū)了,接著又作了修改嗡贺,撤銷修改就回到添加暫存區(qū)后的狀態(tài)隐解。
對于第二種情況,我想我們繼續(xù)做demo來看下诫睬,假如現(xiàn)在我對readme.txt添加一行 內(nèi)容為6666666666666煞茫,我git add 增加到暫存區(qū)后,接著添加內(nèi)容7777777摄凡,我想通過撤銷命令讓其回到暫存區(qū)后的狀態(tài)续徽。如下所示:
注意:命令git checkout -- readme.txt 中的 -- 很重要,如果沒有 -- 的話亲澡,那么命令變成創(chuàng)建分支了钦扭。
2. 刪除文件
假如我現(xiàn)在版本庫testgit目錄添加一個文件b.txt,然后提交。如下:
如上:一般情況下床绪,可以直接在文件目錄中把文件刪了客情,或者使用如上rm命令:rm b.txt ,如果我想徹底從版本庫中刪掉了此文件的話癞己,可以再執(zhí)行commit命令 提交掉膀斋,現(xiàn)在目錄是這樣的,
只要沒有commit之前痹雅,如果我想在版本庫中恢復(fù)此文件如何操作呢概页?
可以使用如下命令 git checkout -- b.txt,如下所示:
再來看看我們testgit目錄练慕,添加了3個文件了。如下所示:
五.遠程倉庫
先注冊github賬號技掏,由于你的本地Git倉庫和github倉庫之間的傳輸是通過SSH加密的铃将,所以需要一點設(shè)置:
第一步:創(chuàng)建SSH Key
在用戶主目錄下,看看有沒有.ssh目錄哑梳,如果沒有劲阎,進行第二步;如果有鸠真,檢查是否已經(jīng)存在 id_rsa.pub 或 id_dsa.pub 文件悯仙,如果文件已經(jīng)存在,那么你可以跳過步驟2吠卷,直接進入步驟3锡垄。
$ cd ~./ssh
第二步:添加ssh
$ ssh-keygen -t rsa -C "your_email@example.com"
代碼參數(shù)含義:
-t 指定密鑰類型,默認是 rsa 祭隔,可以省略货岭。
-C 設(shè)置注釋文字,比如郵箱。
-f 指定密鑰文件存儲文件名千贯。
以上代碼省略了 -f 參數(shù)屯仗,因此,運行上面那條命令后會讓你輸入一個文件名搔谴,用于保存剛才生成的 SSH key 代碼魁袜,如:
Generating public/private rsa key pair.
# Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]
當(dāng)然,你也可以不輸入文件名敦第,使用默認文件名(推薦)峰弹,那么就會生成 id_rsa 和 id_rsa.pub 兩個秘鑰文件。
接著又會提示你輸入兩次密碼(該密碼是你push文件的時候要輸入的密碼申尼,而不是github管理者的密碼)垮卓,
當(dāng)然,你也可以不輸入密碼师幕,直接按回車粟按。那么push的時候就不需要輸入密碼,直接提交到github上了霹粥,如:
Enter passphrase (empty for no passphrase):
# Enter same passphrase again:
接下來灭将,就會顯示如下代碼提示,如:
Your identification has been saved in /c/Users/you/.ssh/id_rsa.
# Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub.
# The key fingerprint is:
# 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com
當(dāng)你看到上面這段代碼的時候后控,那就說明庙曙,你的 SSH key 已經(jīng)創(chuàng)建成功,你只需要添加到github的SSH key上就可以了浩淘。
第三步:添加你的 SSH key 到 github上面去
- 注冊github賬號
- 點擊用戶名頭像,然后選擇Settings進入下個頁面配置公鑰,如下圖:
- 點擊SSH keys,完成公鑰頁面的相關(guān)配置,如下圖:
公鑰的內(nèi)容為id_rsa.pub文件內(nèi)容捌朴,注意不能有空格
- 創(chuàng)建項目倉庫,點擊用戶頭像旁邊 "+" 號,選擇New repository完成倉庫的配置:
- 進入倉庫配置界面,填寫相關(guān)信息,完成倉庫的創(chuàng)建,具體填寫內(nèi)容如下圖:
目前张抄,在GitHub上的這個testgit倉庫還是空的砂蔽,GitHub告訴我們,可以從這個倉庫克隆出新的倉庫署惯,也可以把一個已有的本地倉庫與之關(guān)聯(lián).
第四步:把本地倉庫的內(nèi)容推送到GitHub倉庫
現(xiàn)在左驾,我們根據(jù)GitHub的提示,在本地的testgit倉庫下運行命令:
$ git remote add origin https://github.com/tugenhua0707/testgit.git
把本地庫的內(nèi)容推送到遠程极谊,使用 git push命令诡右,實際上是把當(dāng)前分支master推送到遠程。
由于遠程庫是空的轻猖,我們第一次推送master分支時帆吻,加上了 –u參數(shù),Git不但會把本地的master分支內(nèi)容推送的遠程新的master分支咙边,還會把本地的master分支和遠程的master分支關(guān)聯(lián)起來桅锄,在以后的推送或者拉取時就可以簡化命令琉雳。推送成功后,可以立刻在github頁面中看到遠程庫的內(nèi)容已經(jīng)和本地一模一樣了友瘤,上面的要輸入github的用戶名和密碼如下所示:
從現(xiàn)在起翠肘,只要本地作了提交,就可以通過如下命令:
$ git push origin master
把本地master分支的最新修改推送到github上了辫秧,現(xiàn)在你就擁有了真正的分布式版本庫了束倍。