15分鐘學(xué)會(huì)使用Git

作者:Mark24

郵箱:mark.zhangyoung@qq.com

時(shí)間:2015.07.28

開頭扯扯淡

(想看干貨的跳過這段–>直奔干貨)

個(gè)人也走了很多的彎路學(xué)習(xí)Git

幸運(yùn)的是忆植,彎路走的比較少瑟俭,在Git上只浪費(fèi)了5天

可是我見過許多人枢析,浪費(fèi)了可能更久

標(biāo)題起個(gè)15分鐘是個(gè)噱頭

拋下那些迂腐不堪的書本

類似《Git Pro》,《Git權(quán)威指南》伴挚,《Git社區(qū)手冊(cè)》的那些

我打賭,看那些看得越久灾炭,你只會(huì)覺得Git越難用茎芋,并且用過SVN的同學(xué),還會(huì)吐槽Git設(shè)計(jì)的復(fù)雜

雖然我不是大牛蜈出,但是我站在用戶的角度田弥,非常想吐槽Git

Git設(shè)計(jì)的就是很爛

為毛說他爛?

上圖來說明一切

下圖是SVN的操作邏輯:

主線傻子都能看明白掏缎,就是圖中心的三條線:

Checkout:克隆項(xiàng)目

Commit:提交本地代碼

Update:更新本地代碼?

圖下面三個(gè)線:

add:添加項(xiàng)目

rm:刪除項(xiàng)目

revert:撤銷?

所以我站在用戶的角度皱蹦,SVN的設(shè)計(jì)是清晰的

個(gè)人覺得是設(shè)計(jì)的典范

本來嘛

軟件的設(shè)計(jì)除了功能性

還要設(shè)計(jì)本身就是美的

下面來看看Git

上圖!

下面是Git的操作流程:

說點(diǎn)通俗點(diǎn),設(shè)計(jì)的就是一坨狗屎眷蜈,完全找不到規(guī)律

要我說Linux社區(qū)宗教性十足沪哺,被追捧的大神……

但是往往盛名之下,其實(shí)難副

這玩意就是

東一磚頭酌儒,西一磚頭蓋起來的

我在懷疑有沒有設(shè)計(jì)過辜妓!

順便吐槽

自己也做web開發(fā)

JS這門語言設(shè)計(jì)的最爛

隨著越了解JS,越感覺JS設(shè)計(jì)的爛

JS的語法之混雜忌怎,糅雜了C籍滴,Java …的各種語法

實(shí)在和小而美的Python沒法比?

JS和Git一樣

都是沒有用心設(shè)計(jì)過的產(chǎn)物

得過且過,功能為上的產(chǎn)物

所以榴啸,學(xué)習(xí)語言孽惰,也要了解他們的脾氣和品行?

Python你可以用數(shù)學(xué)的邏輯去推理去學(xué)習(xí),往往可以舉一反三鸥印,因?yàn)樵O(shè)計(jì)邏輯就在那里

JS 呵呵……自己慢慢走遍所有的坑吧?

后來我知道JS是10天設(shè)計(jì)出來了……我只能呵呵勋功,說明我的語言感還是挺準(zhǔn)的

Git核心功能設(shè)計(jì)出來坦报,用時(shí)也不長,可能一周狂鞋,具體的忘了?

總之片择,我們不能迷信權(quán)威

說了這么多,只想說

Git設(shè)計(jì)的都這么爛

你在看他的命令行設(shè)計(jì)的

我靠

簡直就是隨意?

所以說骚揍,別用命令行了字管,不能在樹上吊死

這就是為什么可以15分鐘速成,因?yàn)槲覀兏静挥媚莻€(gè)坑爹的命令

15分鐘掌握Git

先說怎么個(gè)15分鐘法?

首先呢信不,我會(huì)給出Git的工作流程圖?

然后我會(huì)簡單的解釋一下嘲叔,Git的基本概念和工作流程

對(duì)Git完全沒概念的同學(xué),可以看看?

然后我們用一個(gè)更高級(jí)的浑塞,直觀的工具借跪,完成所有想做的事情

而這一切,不需要去挨個(gè)挨個(gè)敲指令

幾乎可以找到每個(gè)常用的境況?

然后重點(diǎn)來了

重點(diǎn)來了

重點(diǎn)來了?

重要的事情說三遍?

用一個(gè)叫做Source Tree的軟件

安裝核心的git

再安裝一個(gè)足夠好的圖形界面客戶端

這就是我的方案?

先別吐槽

我會(huì)告訴你用Source Tree而不是用別的?

Git本身的Windows上的客戶端酌壕,爛的不堪掏愁,直接忽略?

TortoiseGit這種設(shè)計(jì)爛的軟件?

我都懶得推薦

個(gè)人把它拉入黑名單

推薦大家也別用了

界面丑也就算了,基本上反直覺

在圖形化如此發(fā)達(dá)的今天卵牍,這種軟件竟然還存在

這些也就算了果港,反正開源軟件,界面質(zhì)量都不高

但是問題糊昙,這個(gè)軟件刷新率不高

當(dāng)你用Sublime打開文件的時(shí)候辛掠,然后最小化,用TortoiseGit來pull最新代碼

Sublime是不會(huì)刷新的

還有TortoiseGit簡化了Git的模型释牺,取消了暫存區(qū)的概念

不想多說了

你會(huì)偶爾出現(xiàn)萝衩,照著書上,用TortoiseGit操作哦没咙,結(jié)果出現(xiàn)錯(cuò)誤

反正不管怎么樣吧

我就被TortoiseGit給搞的暈頭轉(zhuǎn)向之后就棄用了

Source Tree是個(gè)好東西?

來說說Git是咋么一回事

現(xiàn)在祭上圖

咱們挨個(gè)挨個(gè)解釋一下

最好把這張圖猩谊,單獨(dú)開在一個(gè)窗口,對(duì)照著祭刚,下面就來解釋這個(gè)圖?

首先看這張圖中間牌捷,四個(gè)圓柱?

Workspace:工作區(qū),就是你正在寫的代碼

index:暫存區(qū)涡驮,一個(gè)本地的緩沖區(qū)

local repository:本地倉庫

remote repository:遠(yuǎn)程倉庫?

先來講講術(shù)語

寫代碼暗甥,寫完了保存,這是一般文件的流程

Git多加了一個(gè)流程捉捅,就是保存后撤防,你要提交

Git會(huì)追蹤你每次保存,和上次保存之間的差別??

然后把這些信息棒口,保存在一個(gè)文件夾下即碗,文件夾名叫.git

這個(gè)文件夾叫做倉庫焰情,用倉庫可以追蹤代碼陌凳,看到每次改變了什么剥懒,可以還原到以前的狀態(tài),也可以看別人改了什么合敦,這就是代碼版本控制的本質(zhì)初橘,一種高級(jí)的保存功能,自帶時(shí)光機(jī)的那種

Workspace工作區(qū)

就是你正在寫的代碼充岛,正在打開的編輯器里面的內(nèi)容,解釋完了崔梗,就這樣?

index暫存區(qū)

index照理應(yīng)該翻譯叫索引夜只,這里叫暫存區(qū)

暫存區(qū)是干嘛的?

暫存區(qū)是Git和SVN的最重要的差別之一

我們來看圖蒜魄,箭頭就是代碼流動(dòng)的方向?

Git的流程工作流程就是:

眼前正在寫的代碼(workspace)覺得差不多了

add命令

提交到暫存區(qū)(index)類似于保存一下

然后你可以返回正在寫的代碼(workspace)繼續(xù)寫扔亥,寫的到了一個(gè)階段了

add命令

又提交到了暫存區(qū)(index)?

對(duì)就是這樣子工作的!?

舉一反三L肝旅挤!

舉一反三!伞鲫!

重要的事情說三遍粘茄,舉一反三?

當(dāng)你多次提交,基本工作完成的差不多了

按照道理

你應(yīng)該每次都add到了index暫存區(qū)?

現(xiàn)在好了秕脓,任務(wù)完成

要把暫存區(qū)里的東西柒瓣,放到本地倉庫(local repository)?

使用commit命令?

大家看圖應(yīng)該注意到

worksp –> local repository

有一個(gè)綠色的箭頭 commit -a

這條命令

就是同時(shí)完成,把當(dāng)前的修改吠架,提交到暫存區(qū)芙贫,然后把暫存區(qū)的提交到

本地倉庫?

Git每次提交的,都是保存變化的改動(dòng)诵肛,不是簡簡單單的復(fù)制一遍?

本地倉庫(local repository)

就是正式的代碼保存的地方?

如果你本地所有的內(nèi)容都被commit到本地倉庫了

表示你已經(jīng)很滿意所有的代碼

并且完成了所有的編寫?

這個(gè)時(shí)候屹培,你想把代碼上傳到Github或者公司的Git服務(wù)器,提交給別人

看圖

local repository –> remote repository

中間是push操作?

想對(duì)你正在工作的電腦怔檩,你電腦叫l(wèi)ocal褪秀,本地

網(wǎng)絡(luò)上的,就叫remote薛训,遠(yuǎn)程?

remote repository 遠(yuǎn)程倉庫

就是網(wǎng)絡(luò)上的倉庫

一般是放在網(wǎng)絡(luò)上保存

或者和團(tuán)隊(duì)一起配合著干活

網(wǎng)絡(luò)倉庫就成為一個(gè)中樞的感覺?

我們看圖的上半部分

提交的過程媒吗,按照箭頭,由下往上:?

remote repository:遠(yuǎn)程倉庫

^

|

| push:就是“推”乙埃,把本地的正式的提交代碼闸英,推到網(wǎng)絡(luò)上

|

local repository:本地倉庫

^

|

| commit:合并多次修改锯岖,提交到倉庫保存

|

index :暫存區(qū)

^

|

| add:一段階段的代碼,保存

|

Workspace:正在寫代碼甫何,寫的不錯(cuò)了?

再來看看這張圖的下三路?

remote repository –> workspace?

這里有一個(gè)pull 黃顏色的出吹,操作(rebase后面講)

pull就是“拉”的意思,拉動(dòng)辙喂,把網(wǎng)絡(luò)的代碼捶牢,拉動(dòng)到本地

拉動(dòng)的目標(biāo)是workspace,就是你正在寫的代碼?

解釋一下這里巍耗,比如你正在寫代碼秋麸,或者打開了一個(gè)項(xiàng)目

編輯器Sublime Text上代碼顯示出來了,表示文件打開了

這個(gè)時(shí)候炬太,公司的小明告訴你灸蟆,公司昨天幾位同事加班加點(diǎn),代碼更新了

讓你更新一下代碼,以獲得人家工作一晚上加班的工作成果

你這個(gè)時(shí)候就要pull亲族,拉取最新的代碼炒考,以保證自己和大家的工作進(jìn)度一致

pull的意義在于,執(zhí)行完操作孽水,會(huì)刷新你的編輯器

Sublime Text上的代碼票腰,會(huì)變化到最新的代碼

不信你試試?

TortoiseGit來pull的時(shí)候,編輯器刷新與否女气,似乎看心情 = =b?

下面來看紅色杏慰,紅色的兩個(gè)箭頭

最左邊有一個(gè)小字

revert

意思大概是反轉(zhuǎn),撤銷的意思?

對(duì)啊炼鞠,你光提交缘滥,萬一提交錯(cuò)了呢?

Git里有一套撤銷的機(jī)制

撤銷的機(jī)制尤其復(fù)雜

這里引用一篇文章戳這里

不過那些都不是我們要說的重點(diǎn)

學(xué)習(xí)嘛谒主,要抓住主干朝扼,細(xì)枝末節(jié)的,晚點(diǎn)再說霎肯,又不一定全都遇上

Git復(fù)雜的就可能是撤消了擎颖,這些我們暫時(shí)不管?

下面還有兩路灰色的,左邊的說明是compare

就是可以比較你每次修改的代碼和之前的代碼有什么區(qū)別

這是Git最重要的作用观游,就是可以看到每次提交的不同?

這些也不說搂捧,放在后面說?

現(xiàn)在主要的就是把上三路和pull熟悉?

小結(jié)

【工作區(qū)】->add->【暫存區(qū)】->commit->【本地倉庫】->push->【遠(yuǎn)程倉庫】?

【工作區(qū)】<------------------ pull ----------------- 【遠(yuǎn)程倉庫】

記住:

add懂缕、commit允跑、push、pull?

可愛的Source Tree

Source Tree是一個(gè)優(yōu)秀的,直覺式的Git的圖形界面客戶端

Source Tree用了很優(yōu)雅的方式和直覺化的流程聋丝,讓你很優(yōu)雅的使用Git

基本上所有常用場景下索烹,都可以勝任,如果實(shí)在情況特殊弱睦,使用命令行?

下面是Source Tree界面

Source Tree的設(shè)計(jì)符合直覺

這張圖上面的圖標(biāo)百姓,基本上是所有常用的操作了

Clone/New:Clone就是克隆,copy拷貝的另一種稱呼每篷,這里意思是從遠(yuǎn)程倉庫瓣戚,拷貝一個(gè)項(xiàng)目到本地?

Commit:大家一看就明白?

Checkout:沒講,簡單的說焦读,你保存了一個(gè)版本到暫存區(qū),然后繼續(xù)寫舱权,寫著寫著后悔了矗晃,挨個(gè)挨個(gè)改回去太麻煩,checkout就是從暫存區(qū)的一個(gè)保存版本還原到正在寫的編輯器宴倍,這一點(diǎn)张症,看第一地圖,紅色的短的checkout描述的就是這個(gè)意思(checkout HEAD后面講)?

Discard:丟棄?

Stash:保存你目前的所有狀態(tài)鸵贬,到一個(gè)特別的文件–>我個(gè)人覺得這個(gè)很常用俗他,一會(huì)提到?

Add:把文件提到暫存區(qū)?

Fetch:看看地圖,遠(yuǎn)程倉庫拉去到倉庫阔逼,目前打開的編輯器不會(huì)變化?

Pull:提過了?

Branch:分支,這個(gè)不講兆衅,一般項(xiàng)目負(fù)責(zé)人負(fù)責(zé)?

Merge: 合并分支,同上

覺得難記沒關(guān)系嗜浮,SourceTree有中文界面可以挑

用英文羡亩,主要是和Git的命令,對(duì)應(yīng)起來危融,有助于找規(guī)律?

下面一個(gè)框區(qū)畏铆,就是diff,比較代碼不同的地方

紅色是刪掉的吉殃,標(biāo)記為減號(hào)

綠色是添加的辞居,標(biāo)記為加號(hào)?

Source Tree實(shí)時(shí)幫你顯示,所以diff這個(gè)命令壓根不需要你敲?

現(xiàn)在了解完畢Git的工作流程

現(xiàn)在讓我們用Source Tree走一遍

本篇文章就是在Github上建立的一個(gè)項(xiàng)目(如果不知道怎么做蛋勺,輕查詢Github官方教程)

然后clone到本地

把項(xiàng)目添加到了Source Tree

把項(xiàng)目添加到Source Tree

下面簡稱SourceTree為ST

然后用編輯器打開文件編輯瓦灶,編輯完畢后,保存文件,這個(gè)一定要保存,然后可以把編輯器最小化了兔簇,然后可以看看ST

點(diǎn)擊如圖点骑,第一步恩敌,工作副本

這個(gè)要經(jīng)常點(diǎn)指攒,只要你點(diǎn)了足删,切換就會(huì)刷新

稍微等一會(huì)掖看,第二部的地方眨层,就會(huì)出現(xiàn)文件的修改狀態(tài)

第二部所在的區(qū)域庙楚,就是工作區(qū),就是你編輯器趴樱,編輯器的文件臨時(shí)狀態(tài)馒闷,可以部分選,也可以全選叁征,選擇后纳账,會(huì)出現(xiàn)如下圖:

整個(gè)項(xiàng)目移動(dòng)到上面,就是暫存區(qū)捺疼,右邊是Diff狀態(tài)疏虫,表示你修改了什么

提交按鈕,就是Commit啤呼,點(diǎn)擊他卧秘,進(jìn)入下圖:

如圖會(huì)跳出一個(gè)commit信息,看過Git的同學(xué)官扣,應(yīng)該知道翅敌,每次commit都會(huì)讓你鍵入一個(gè)message,其實(shí)就是寫明惕蹄,你做了什么蚯涮,改了什么,這樣子等到回退焊唬,撤銷的時(shí)候恋昼,一看信息就明白了

下面有一個(gè)按鈕,和上面的推送是一樣的

可以先commit赶促,然后push

如果倉庫是配置好的?

按一下液肌,就可以提交代碼了?

提交好代碼后,可以看到如圖:

左邊的分支鸥滨,可以看到整體情況

右邊的字段:

圖表:一種分支圖嗦哆,可以看清項(xiàng)目合并情況

描述:就是commit的message

提交:提交生成的hash碼

作者:誰提交的,這個(gè)團(tuán)隊(duì)配合作用救命掀了

真正的復(fù)雜的項(xiàng)目婿滓,上一張圖老速,讓大家感受下:

分支情況會(huì)特別的復(fù)雜,感受下凸主。

小結(jié)

ST確實(shí)用圖形界面把Git的操作簡化到十分優(yōu)雅的地步

Git提交代碼的流程橘券,已經(jīng)描述完畢

是不是十分簡單

后記

明天有活干了

關(guān)于如何撤銷?

分支創(chuàng)建和合并?

還有團(tuán)隊(duì)合作策略(stash的應(yīng)用),如何避免沖突?

這個(gè)有空再寫

資源聲明:圖片來自于互聯(lián)網(wǎng)

版權(quán)聲明:自由轉(zhuǎn)載-非商用-非衍生-保持署名(創(chuàng)意共享3.0許可證)

反饋

可以在issue中反饋,歡迎交流旁舰,共同進(jìn)步

贊助



贈(zèng)送2個(gè)學(xué)習(xí)git的網(wǎng)址:https://learngitbranching.js.org/?demo

https://unbug.github.io/codelf/


需要企業(yè)簽的锋华,聯(lián)系QQ:807224386 ? ? 微信:wx807224386

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市箭窜,隨后出現(xiàn)的幾起案子毯焕,更是在濱河造成了極大的恐慌,老刑警劉巖磺樱,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纳猫,死亡現(xiàn)場離奇詭異,居然都是意外死亡竹捉,警方通過查閱死者的電腦和手機(jī)芜辕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來活孩,“玉大人物遇,你說我怎么就攤上這事『度澹” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵乃沙,是天一觀的道長起趾。 經(jīng)常有香客問我,道長警儒,這世上最難降的妖魔是什么训裆? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蜀铲,結(jié)果婚禮上边琉,老公的妹妹穿的比我還像新娘。我一直安慰自己记劝,他們只是感情好变姨,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著厌丑,像睡著了一般定欧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上怒竿,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天砍鸠,我揣著相機(jī)與錄音,去河邊找鬼耕驰。 笑死爷辱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播饭弓,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼双饥,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了示启?” 一聲冷哼從身側(cè)響起兢哭,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎夫嗓,沒想到半個(gè)月后迟螺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舍咖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年矩父,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片排霉。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窍株,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出攻柠,到底是詐尸還是另有隱情球订,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布瑰钮,位于F島的核電站冒滩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏浪谴。R本人自食惡果不足惜开睡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苟耻。 院中可真熱鬧篇恒,春花似錦、人聲如沸凶杖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽官卡。三九已至蝗茁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寻咒,已是汗流浹背哮翘。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毛秘,地道東北人饭寺。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓阻课,卻偏偏與公主長得像,于是被迫代替她去往敵國和親艰匙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子限煞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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