GitHub 快速入門-Git教程

幾個(gè)月以前想在GitHub托管一個(gè)項(xiàng)目,聽說(shuō)非常好用,便一睹為快。殊不知在上面點(diǎn)了半天,也不知道個(gè)所以然,搜索了半天也沒有一個(gè)足夠清晰的教程。如果現(xiàn)在的你和我當(dāng)時(shí)一樣confuse。希望當(dāng)你閱讀完這篇文章的時(shí)候,至少在使用上沒有任何困難,并且也被Git的魅力吸引,漸漸喜歡上它,那我的目的就達(dá)到了。

**Git Tutorials **

想要學(xué)會(huì)如何使用GitHub,首先要我們要明白Git的原理和一些簡(jiǎn)單的操作使用,接下來(lái)我們就開始Git之旅吧:

Git-開源的分布式版本控制系統(tǒng),它的功能通俗點(diǎn)說(shuō)就是可以用來(lái)方便的管理我們不同項(xiàng)目的各個(gè)版本,可以在不同的機(jī)器上對(duì)一個(gè)項(xiàng)目進(jìn)行維護(hù),修改。之所以稱其為分布式,是因?yàn)槲覀兠總€(gè)人都可以Download一個(gè)倉(cāng)庫(kù)到自己的本地上, 對(duì)其進(jìn)行修改,然后提交到遠(yuǎn)程倉(cāng)庫(kù)去。

  • MsysGit 的安裝(本篇以window環(huán)境為例)
    根據(jù)你的操作系統(tǒng)是32位,還是64位的下載一個(gè)對(duì)應(yīng)版本MsysGit,因?yàn)镸sysGit是安裝最簡(jiǎn)單的一個(gè),所以別的就不推薦了,免得過(guò)于煩人。
  • 初始化工作
    假設(shè)你已經(jīng)安裝好了MsysGit,我們開始第一步吧:首先打開Git Bash,我們看到一個(gè)類似Window控制臺(tái)的界面。我們接下來(lái)要做的感覺有點(diǎn)像是一個(gè)迷路的人進(jìn)了警察局填單的過(guò)程:
  1. 首先得填填你的名字啊,郵箱吧
    $ git config --global user.name "JIANLAM"
    $ git config --global user.email "mrkinlam7@Gmail.com"

    大家英文好,當(dāng)然知道這段代碼的意思就是:Git 配置 --全局變量:用戶的名字/郵箱,所以把你自己的名字郵箱填上去吧(別填成我的哦),那我怎么知道我填進(jìn)去有沒有被記錄在里面呢,那就用這行命令,就能得到一個(gè)系統(tǒng)配置的清單,包括后面的縮寫配置都會(huì)被記錄在這里。

         $ git config --list
    
  2. 接下來(lái)警察得問(wèn)你家住哪里吧

我們用命令pwd看看自己所在的位置,原來(lái)我們?cè)贑盤的用戶文件,志堅(jiān)下面。為了方便操作,我們到桌面去,cd 到桌面Desktop,然后我們?cè)谧烂鎰?chuàng)建一個(gè)folder(文件夾),并cd到里面去,這和window下操作很像吧,如果你要倒退就可以用命令:

     $ cd ..
  • 我們的第一個(gè)倉(cāng)庫(kù)
    為什么這個(gè)folder取名為lovepoems呢,有句話說(shuō)的好:生活不只有茍且,還有詩(shī)和遠(yuǎn)方。
    想學(xué)Git的朋友想必心懷遠(yuǎn)方,那怎么能少了詩(shī)呢。我們接下來(lái)就來(lái)創(chuàng)建一個(gè)倉(cāng)庫(kù)(Repository又稱為版本庫(kù)),這個(gè)倉(cāng)庫(kù)用來(lái)堆我們的情詩(shī)。輸入命令: $ git init

下面的提示我們說(shuō):你初始化了一個(gè)空的Git倉(cāng)庫(kù)在lovepoens的.git文件下,這個(gè).git文件是一個(gè)隱藏的文件,里面有管理我們倉(cāng)庫(kù)的重要文件,所以沒什么事不要碰它,到此我們的倉(cāng)庫(kù)就建好了,是不是很簡(jiǎn)單呢。

  • 添加與提交
    我們來(lái)寫第一行情書,來(lái)到lovepoems倉(cāng)庫(kù)下。創(chuàng)建一個(gè)txt文本,名字叫MyDarling,內(nèi)容用NotePad編輯的(推薦大家使用),如下:

關(guān)于這段肉麻的一行情書,我們看看倉(cāng)庫(kù)本人怎么說(shuō):


由于我們把lovepoems創(chuàng)建為一個(gè)倉(cāng)庫(kù),里面一旦有文件被修改,創(chuàng)建,刪除等,倉(cāng)庫(kù)就會(huì)立刻察覺到。我們看到右邊多了一個(gè)藍(lán)色的英文 master 表示我們現(xiàn)在在主分支,分支是什么鬼,后面再說(shuō)吧。我們用命令 $ git status 查看目前倉(cāng)庫(kù)的狀態(tài),它說(shuō)在分支master上,有一個(gè)未被追蹤的文件,然后它很熱心的提出,你可以使用 $ git add <file> 的方式把它添加到準(zhǔn)備要提交的隊(duì)列中去。

好吧,你是倉(cāng)庫(kù)你說(shuō)了算:


我們把MyDarling文件添加進(jìn)去,然后用命令 $ git status 看看它說(shuō)啥,它說(shuō)有一個(gè)新文件MyDarling準(zhǔn)備提交。

接下來(lái)我們把文件給提交了:

我們用命令$ git commit -m " sth want to say" 去提交我們的MyDarling文件,其中-m的意思就是Message, 就有點(diǎn)像是一個(gè)標(biāo)簽,關(guān)于你這次提交想說(shuō)的一些提示性的訊息。我們同樣用熟悉的命令 $ git status 來(lái)看看倉(cāng)庫(kù)的狀態(tài),它說(shuō)沒東西可提交了,工作區(qū)的文件很干凈。其實(shí)翻譯為干凈還是太奇怪了,應(yīng)該說(shuō)工作區(qū)的文件沒什么異樣。

接下來(lái)我們來(lái)看看Git 的workflow(工作流程):

我們看到一共分為三個(gè)部分,第一個(gè)是 Working copy 工作副本->就是你本地的電腦;第二個(gè)是** Staging area ** 暫存區(qū)域(或者叫Index)->就是準(zhǔn)備被提交的區(qū)域;第三個(gè)圖中畫的不全,是一個(gè)被HEAD指針鎖定的Master分支,我們上面說(shuō)了剛剛創(chuàng)建的倉(cāng)庫(kù)Repository就包涵了這個(gè)Master分支。既然圖畫的不全,我們自己來(lái)畫一個(gè):

圖中我們可以清晰的看到整個(gè)流程,我們假設(shè)在工作區(qū)有個(gè)readMe.txt文件,接下來(lái)我們就把它添加到暫存區(qū),接著再提交到Master這個(gè)主分支。而一旦我們添加到Repository倉(cāng)庫(kù)之后,倉(cāng)庫(kù)就會(huì)tracked(追蹤)這個(gè)文件,以后這個(gè)文件要是有什么變化,我們就可以馬上知道。

現(xiàn)在我們來(lái)寫多兩首詩(shī),分別叫prettygirlGoodbye:

要是有女程序媛看完以后,肯定說(shuō)典型的渣男??!~額,反正我不是。好了,詩(shī)寫完了自我感覺不錯(cuò),把它加到倉(cāng)庫(kù)吧。滿滿的一屏命令行,先 $ clear 清一下屏吧:

老規(guī)矩,先看看倉(cāng)庫(kù)什么狀況,用命令: $ git status ,果然有我們剛剛寫的兩首一行情詩(shī)沒被添加進(jìn)去,接著我們可以用$ git add . 把所有文件都添加到 Staging area 暫存區(qū)中去,再看看狀態(tài),它說(shuō)有兩個(gè)文件已經(jīng)準(zhǔn)備提交了。

那就提交唄,多大點(diǎn)事:

我們把它提交,并且難過(guò)的留下了一個(gè)標(biāo)記,"my heart is broken"。其實(shí)大家應(yīng)該發(fā)現(xiàn)了,我們添加的時(shí)候可以添加很多個(gè),提交的時(shí)候就一次性把所有東西都提交了。而且這兩步是必不可少的,大家要留心了。

到此為止,我們看看倉(cāng)庫(kù)都有些什么東西: $ git log

我們看到自己的訊息,時(shí)間,還有兩次提交的版本名字,還有一個(gè)commit id。

---寫于15.5.2016

  • Git的時(shí)光倒流

上面的日志確實(shí)還行,夠詳細(xì),但是太多了,我們用 $ git log --pretty=oneline 來(lái)展示漂亮的一行。

好了,現(xiàn)在只有commit id號(hào)和版本留下的標(biāo)志。昨晚一宿沒睡想了想,她是一個(gè)好女孩啊,被她看見了,太傷她心了,渣男一只。還是回到上一個(gè)版本的節(jié)奏吧。那要怎么做呢:

我們其實(shí)一直在HEAD指向的Master分支上,前面大家都知道了,即HEAD指向的當(dāng)前版本->my heart is broken。HEAD表示上一個(gè)版本,HEAD^表示上上一個(gè)版本,如果你有commit id 號(hào),直接表示也可以,因?yàn)樗俏ㄒ坏臉?biāo)識(shí)。當(dāng)你用命令$ git reset --hard HEAD^ ,HEAD指針就會(huì)指向下一個(gè)版本,我們來(lái)具體試試:

我們首先看看自己的位置,在lovepoems文件夾下。用命令$ ls看看該folder下都有啥:好,確實(shí)是我們寫的3首一行情詩(shī)。接著我們就要回退版本啦,玩過(guò)英雄聯(lián)盟的人應(yīng)該覺得,有點(diǎn)像艾克大招不是么。敲下命令$ git reset --hard HEAD^,然后神奇的發(fā)現(xiàn)我們倉(cāng)庫(kù)下就只有MyDarling這個(gè)文件了!它也提示我們,恭喜你回到過(guò)去,你現(xiàn)在所處的位置是上一個(gè)版本,my first love pomes。

有人說(shuō),如果哪天女朋友把我lol符文全部融了,我要拿出那個(gè)傷心欲絕的版本刺激她該怎么做呢:


我們用命令$ git reflog 就可以查看所有做過(guò)的操作,我們看到最下面的兩個(gè)就是我們一開提交的兩個(gè)版本,前面有個(gè)commit id號(hào),這次我們用它來(lái)轉(zhuǎn)換版本:


這樣我們就又返回到最新的版本了,并且知道這個(gè)方法后就可以任意穿梭時(shí)空了,還有就是commit id可以不寫全,寫幾個(gè)數(shù)字就可以了。上面的$git reset --hard xxx中reset我知道重設(shè)的意思,那--hard是什么呢,我也不知道,看看官方文檔怎么說(shuō):
Git參考文檔中找到reset里面--hard的介紹:


它說(shuō)重新設(shè)置暫存區(qū)和工作區(qū),任何對(duì)追蹤文件修改的提交都會(huì)被丟棄。哦,原來(lái)是這樣。大家想深入學(xué)習(xí)Git的這也不失為一種學(xué)習(xí)方式,本文只是為如何使用Github做鋪墊,想成為Git大師還得靠大家自己努力呢。

  • 撤銷 ( Unstage )

每個(gè)成功程序猿的背后都有一個(gè)厲害的程序媛,你女朋友也會(huì)用Git啊,某天她看到你寫的情詩(shī)被深深的打動(dòng)了,決定也寫一行情詩(shī)給你:

她微信截了圖給你,你收到以后整個(gè)人都不好了,首先你是處女座,其次這詩(shī)太美了,無(wú)力吐槽。你坐在地鐵上,琢磨著該怎么撤銷它:

假如她只是在工作區(qū)修改了,那好辦啊,手動(dòng)刪了那句或者輸入命令$ git checkout -- MyDarling.txt不就撤銷了嗎。那如果添加到暫存區(qū)了,或者提交了怎么辦,可以輸入$ git reset HEAD MyDarling.txt先返回到上一個(gè)區(qū)域,然后再用$ git checkout -- MyDarling.txt命令,修改的內(nèi)容也就順利撤銷了。

其中$cat xxx.txt是查看某文件的內(nèi)容。

  • 文件管理

災(zāi)難終于告一段落了,可以專心寫詩(shī)了。某天靈感來(lái)了,覺得這個(gè)MyDarling的名字好像跟詩(shī)沒什么關(guān)系,于是把它改成了onlyYou。我們看看倉(cāng)庫(kù)怎么說(shuō):


大概意思是說(shuō),你想改名字啊,可以啊,先把MyDarling.txt 通過(guò)$ git rm <file>的形式刪除,然后在把onlyYou.txt添加進(jìn)來(lái)。好唄,試試看:

它提示我們已經(jīng)重命名了,果然成功了!

  • 移動(dòng)

每次都要這樣弄,不是很容易作死自己?jiǎn)?,這里介紹一個(gè)更簡(jiǎn)單的方法:

我們使用$ git mv xx.txt xxx.txt的命令,xx.txt是更改名字前的文件,xxx.txt是更改名字后的文件,我們看到果然也成功了。如果你要把這個(gè)修改后的文件移動(dòng)某個(gè)目錄下只要在前面加個(gè)文件夾名就好了,$ git mv xx.txt file/xxx.txt

  • 文件的刪除
    某天你喜歡的女生跑去跟別的男生開黑了,從那天起,你的天空仿佛失去了顏色,不再相信愛情了,想把寫過(guò)的詩(shī)給刪了:

刪了,什么都沒了:

某天你發(fā)現(xiàn)原來(lái)那個(gè)是她弟,希望又來(lái)了,想把詩(shī)找回來(lái)。所幸我們?cè)缫淹浇o了倉(cāng)庫(kù),就相當(dāng)于我們本地一份,倉(cāng)庫(kù)一份。從它那里拿回來(lái)就好了:

果然回來(lái)了,當(dāng)然如果你要狠心點(diǎn)把倉(cāng)庫(kù)的文件都刪了,就可以用$ git rm xx.txt 這個(gè)時(shí)候你本地Working copy的文件也會(huì)被刪了,最后提交一下就可以了。

  • 分支

之前我們遺留下來(lái)一個(gè)問(wèn)題,什么叫分支。不知道大家有沒有看過(guò)《心靈想要大聲呼喊》里面要表演一個(gè)音樂舞臺(tái)劇,敲定以后,大家就開始分工合作了,有人要弄服裝設(shè)計(jì),有人要弄舞臺(tái)燈光,有人要設(shè)計(jì)舞蹈,有人要學(xué)唱歌,這就是分支。等到家都弄得差不多了,在把大家的匯總,那這個(gè)舞臺(tái)劇就形成了。

假如現(xiàn)在出版社要我寫一些更感性的詩(shī),那我可以這樣做:

命令$ git branch xx 可以創(chuàng)建一個(gè)分支,再用$ git checkout xx進(jìn)入這個(gè)分支。如果嫌麻煩,你也可以用這句命令,一個(gè)頂兩個(gè):git checkout -b xx創(chuàng)建并進(jìn)入該分支

在添加一句詩(shī),最后提交就完事了,我們看到果然修改成我要的樣子了。

我們現(xiàn)在回到主分支master上:

我們神奇的發(fā)現(xiàn)onlyYou.txt文件里面的內(nèi)容并沒有發(fā)生任何改變。這就認(rèn)證了我們的設(shè)想,只要沒有匯總,主分支上是不會(huì)受到其他分支影響的。主編看了下我的詩(shī)覺得寫得不錯(cuò),于是決定采用這首詩(shī):

用命令$ git merge xx合并分支,我們看到onlyYou.txt文件,果然多了最新寫的詩(shī),最后用命令$ git branch -d xx 刪除分支即可。

幫大家總結(jié)了一下,如圖:

  • 縮寫

     $ git config --global alias.st status
     $ git config --global alias.co checkout
     $ git config --global alias.ci commit
     $ git config --global alias.br branch
    

我們一開始配置全局變量,也是這樣的格式,這里配置的是縮寫,因?yàn)榉爆嵉妮斎?,你可能?huì)厭倦了commit這樣長(zhǎng)的輸入,所以我們可以通過(guò)上面的設(shè)置把它簡(jiǎn)化成ci, 這樣以后你要提交的時(shí)候,就可以寫成這種形式:
& git ci -m"xxxx"

還有一個(gè)命令要告訴大家的就是,可以查看工作區(qū)和暫存區(qū)文件的不同,做了哪些修改:

 $ git diff <file>

遠(yuǎn)程倉(cāng)庫(kù)

好了,到此Git就介紹完了,大家對(duì)它是不是有更多的理解了呢。下一篇,我們就要來(lái)講講如何使用GitHub了。如果你覺得對(duì)你有所幫助,那就給我一點(diǎn)點(diǎn)鼓勵(lì),謝謝!~祝大家學(xué)習(xí),工作愉快。

已經(jīng)跟新了,請(qǐng)參考:
GitHub正確打開方式-協(xié)同項(xiàng)目

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容