git自linux之父發(fā)明以來飞蹂,一直是很多互聯(lián)網(wǎng)企業(yè)組織團隊協(xié)作寫代碼的利器几苍,所以,只要入職公司陈哑,無一不要求學(xué)會git妻坝。
做為剛畢業(yè)的小松,已經(jīng)脫離了畢業(yè)生身份惊窖,雖然做過一些項目刽宪,但是git用得很少,馬上入職了界酒,對于git心里沒底页徐,碰巧看到一位知乎老哥推薦疲吸,點進去一看曙求,立馬打開了新世界的大門簸州!學(xué)得那叫一個酣暢淋漓醇坝,一起來學(xué)學(xué)吧延蟹。
進入這個網(wǎng)站窍仰,會看到以下目錄
可以看到這是一個闖關(guān)模式将硝,分為基礎(chǔ)岩四,高級哭尝,移動提交記錄和雜項四個部分,我自己感覺學(xué)完基礎(chǔ)和高級的一部分就已經(jīng)能夠解決工作中大部分需求了剖煌。
基礎(chǔ)篇
git commit
這個操作時提交新的版本材鹦,如圖逝淹。
git commit 前
執(zhí)行
git commit
不僅僅為了過關(guān),這里從圖中很清晰的看出桶唐,原來是c0栅葡,c1兩個提交,然后git commit之后就會多一個提交尤泽。
這個master什么意思呢欣簇?就是所處分支的名字,無論你用git commit提交了多少次坯约,c0,c1,c2,c3……都屬于一個名叫master的分支熊咽,而master旁邊的星號表示的是當(dāng)前處于的分支。這樣可以實現(xiàn)不同分支的跳轉(zhuǎn)闹丐,也可以實現(xiàn)同一個分支不同提交記錄的轉(zhuǎn)換横殴。
如果我們想回到c1,但是又不想撤銷c2的話卿拴,我們就可以通過命令讓master指向c1衫仑,如果我們有其他分支,我們就可以讓星號移動到其他分支堕花。
上面這一段很重要文狱,是理解下面內(nèi)容的基礎(chǔ)
也就是說,git的本質(zhì)就是一棵提交的樹航徙,可以反復(fù)提交不斷修改如贷,但是之前的提交記錄是可以找到的,每次是誰提交到踏,內(nèi)容是什么杠袱,時間都可以看到!
git branch
執(zhí)行
git branch newImage
執(zhí)行完 git branch newImage后窝稿,顯然楣富,將會出現(xiàn)一個新的分支,你猜猜這個新分支出現(xiàn)在哪里呢伴榔?
是不是覺得有點奇怪纹蝴?分支其實并不是真正的提交,僅僅只是一個名字踪少,真正的提交記錄是c0塘安,c1!而無論是master還是newImage都是為這個分支命名而已援奢,這里僅僅是新建了分支兼犯,并沒有其他操作,所以他默認指向原來的提交記錄。
現(xiàn)在切黔,我們不僅要有新分支砸脊,而且新分支指向不同的提交記錄,怎么辦纬霞?當(dāng)然是用git commit啦凌埂。
執(zhí)行
git commit
這里為啥master前進了?
這是必須的诗芜,因為*星號表示當(dāng)前分支瞳抓,我們雖然新建了分支,但是當(dāng)前分支绢陌,也就是最下端我們能看到的還是master挨下,所以newImage被放到了上面,所以脐湾,要想以后在newImage上提交東西臭笆,必須先進行切換。
git checkout <name>
這里我們先不輸入 git commit秤掌,而是在這之前使用git checkout愁铺。
執(zhí)行
git checkout newImage
git commit
可以看到,先切換到newImage后闻鉴,星號落在了newImage上茵乱,然后再git commit,就可以完成新分支指向新提交記錄的創(chuàng)建孟岛,不會影響老分支和老提交記錄瓶竭。
那如何讓兩個分支沒有關(guān)系,獨立發(fā)展呢渠羞?很簡單斤贰,只需要切回到master分支,然后再提交一次即可次询。
執(zhí)行
git checkout master
可以看到 *號移動到master那里了荧恍。
然后再次執(zhí)行
git commit
發(fā)現(xiàn)兩個分支真正的完成了分離。
是不是覺得很nice屯吊,以后想要切換就可以用git checkout來回移動送巡,左右橫跳啦!
git merge <name>
分支建立多了盒卸,自然需要合并骗爆,這里的merge就是這個功能,兩個分支蔽介,合并后的名字屬于誰呢淮腾?一猜就知道糟需,當(dāng)前分支是哪個,合并后的分支就是哪個名字谷朝,也可以說在當(dāng)前分支master上執(zhí)行 git merge bugFix,就是將bugFix歸到master中武花,更好理解圆凰。
執(zhí)行
git merge bugFix
為了表示方便,將bugFix的顏色轉(zhuǎn)換一下体箕,左邊的命令還沒有執(zhí)行专钉。
現(xiàn)在我們有兩個分支master和bugFix,我們希望兩個分支都擁有所有的修改的記錄累铅,所以我們還要再執(zhí)行一次git merge master跃须,但是由于當(dāng)前分支在master,我們還要先切換到bugFix中娃兽。
執(zhí)行
git checkout bugFix
git merge master
這樣兩次合并菇民,就使得兩個分支都擁有全部的提交記錄了,我們新建的兩個分支投储,最終又合為一體第练。
小結(jié)
上面的東西雖然少,但是足夠完成很多工作玛荞,授人以魚不如授人以漁娇掏,網(wǎng)站如下:
learngitbranching
我曾在幾個月前試圖學(xué)習(xí)git,但是無論是博文還是視頻往往都有講述不清楚或者引起歧義的地方勋眯,只有真正的可視化才能讓人弄懂婴梧,致敬作者!
一起加油學(xué)習(xí)git吧客蹋,少年塞蹭。