原文鏈接
請(qǐng)先配置好Git環(huán)境,參見
Git使用教程--最詳細(xì)曙痘、最傻瓜芳悲、最淺顯、真正手把手教边坤!(一)
Git使用教程--最詳細(xì)名扛、最傻瓜、最淺顯茧痒、真正手把手教肮韧!(二)
1.如何從遠(yuǎn)程庫克隆旺订?
上面我們了解了先有本地庫弄企,后有遠(yuǎn)程庫時(shí)候,如何關(guān)聯(lián)遠(yuǎn)程庫∏現(xiàn)在我們想拘领,假如遠(yuǎn)程庫有新的內(nèi)容了,我想克隆到本地來 如何克隆呢樱调?首先约素,登錄github届良,創(chuàng)建一個(gè)新的倉庫,名字叫testgit2.如下:
如下圣猎,我們看到:
現(xiàn)在士葫,遠(yuǎn)程庫已經(jīng)準(zhǔn)備好了,下一步是使用命令git clone克隆一個(gè)本地庫了样漆。如下所示:
接著在我本地目錄下 生成testgit2目錄了为障,如下所示:
2. 創(chuàng)建與合并分支
在版本回退里,你已經(jīng)知道放祟,每次提交鳍怨,Git都把它們串成一條時(shí)間線,這條時(shí)間線就是一個(gè)分支跪妥。截止到目前鞋喇,只有一條時(shí)間線,在Git里眉撵,這個(gè)分支叫主分支侦香,即master分支。HEAD嚴(yán)格來說不是指向提交纽疟,而是指向master罐韩,master才是指向提交的,所以污朽,HEAD指向的就是當(dāng)前分支散吵。
首先,我們來創(chuàng)建dev分支蟆肆,然后切換到dev分支上矾睦。如下操作:
git checkout 命令加上 –b參數(shù)表示創(chuàng)建并切換,相當(dāng)于如下2條命令
git branch dev
git checkout dev
git branch 查看分支炎功,會(huì)列出所有的分支枚冗,當(dāng)前分支前面會(huì)添加一個(gè)星號(hào)。然后我們?cè)赿ev分支上繼續(xù)做demo蛇损,比如我們現(xiàn)在在readme.txt再增加一行 7777777777777
首先我們先來查看下readme.txt內(nèi)容赁温,接著添加內(nèi)容77777777,如下:
現(xiàn)在dev分支工作已完成淤齐,現(xiàn)在我們切換到主分支master上束世,繼續(xù)查看readme.txt內(nèi)容如下:
現(xiàn)在我們可以把dev分支上的內(nèi)容合并到分支master上了,可以在master分支上床玻,使用如下命令 git merge dev 如下所示:
git merge命令用于合并指定分支到當(dāng)前分支上,合并后沉帮,再查看readme.txt內(nèi)容锈死,可以看到贫堰,和dev分支最新提交的是完全一樣的。
注意到上面的Fast-forward信息待牵,Git告訴我們其屏,這次合并是“快進(jìn)模式”,也就是直接把master指向dev的當(dāng)前提交缨该,所以合并速度非迟诵校快。合并完成后贰拿,我們可以接著刪除dev分支了蛤袒,操作如下:
總結(jié)創(chuàng)建與合并分支命令如下:
查看分支:git branch
創(chuàng)建分支:git branch name
切換分支:git checkout name
創(chuàng)建+切換分支:git checkout –b name
合并某分支到當(dāng)前分支:git merge name
刪除分支:git branch –d name
2.如何解決沖突?
先新建一個(gè)新分支膨更,比如名字叫fenzhi1妙真,在readme.txt添加一行內(nèi)容8888888,然后提交荚守,如下所示:
同樣珍德,我們現(xiàn)在切換到master分支上來,也在最后一行添加內(nèi)容矗漾,內(nèi)容為99999999锈候,如下所示:
現(xiàn)在我們需要在master分支上來合并fenzhi1,如下操作:
Git用<<<<<<<敞贡,=======泵琳,>>>>>>>標(biāo)記出不同分支的內(nèi)容,其中<<<head是指主分支修改的內(nèi)容嫡锌,>>>>>fenzhi1 是指fenzhi1上修改的內(nèi)容虑稼,我們可以修改下如下后保存:
</head是指主分支修改的內(nèi)容,>
如果我想查看分支合并的情況的話势木,需要使用命令 git log命令行演示如下:
3.分支管理策略
通常合并分支時(shí)蛛倦,git一般使用”Fast forward”模式,在這種模式下啦桌,刪除分支后溯壶,會(huì)丟掉分支信息,現(xiàn)在我們來使用帶參數(shù) –no-ff來禁用”Fast forward”模式甫男。首先我們來做demo演示下:
創(chuàng)建一個(gè)dev分支且改。
修改readme.txt內(nèi)容。
添加到暫存區(qū)板驳。
切換回主分支(master)又跛。
合并dev分支,使用命令 git merge –no-ff -m “注釋” dev
查看歷史記錄
分支策略:首先master主分支應(yīng)該是非常穩(wěn)定的若治,也就是用來發(fā)布新版本慨蓝,一般情況下不允許在上面干活感混,干活一般情況下在新建的dev分支上干活,干完后礼烈,比如上要發(fā)布弧满,或者說dev分支代碼穩(wěn)定后可以合并到主分支master上來。
4.bug分支
在開發(fā)中此熬,會(huì)經(jīng)常碰到bug問題庭呜,那么有了bug就需要修復(fù),在Git中犀忱,分支是很強(qiáng)大的募谎,每個(gè)bug都可以通過一個(gè)臨時(shí)分支來修復(fù),修復(fù)完成后峡碉,合并分支近哟,然后將臨時(shí)的分支刪除掉。
比如我在開發(fā)中接到一個(gè)404 bug時(shí)候鲫寄,我們可以創(chuàng)建一個(gè)404分支來修復(fù)它吉执,但是,當(dāng)前的dev分支上的工作還沒有提交地来。比如如下:
并不是我不想提交戳玫,而是工作進(jìn)行到一半時(shí)候,我們還無法提交未斑,比如我這個(gè)分支bug要2天完成咕宿,但是我issue-404 bug需要5個(gè)小時(shí)內(nèi)完成。怎么辦呢?還好,Git還提供了一個(gè)stash功能书蚪,可以把當(dāng)前工作現(xiàn)場(chǎng) ”隱藏起來”辣往,等以后恢復(fù)現(xiàn)場(chǎng)后繼續(xù)工作峭判。如下:
所以現(xiàn)在我可以通過創(chuàng)建issue-404分支來修復(fù)bug了。
首先我們要確定在那個(gè)分支上修復(fù)bug,比如我現(xiàn)在是在主分支master上來修復(fù)的,現(xiàn)在我要在master分支上創(chuàng)建一個(gè)臨時(shí)分支田巴,演示如下:
修復(fù)完成后,切換到master分支上挟秤,并完成合并壹哺,最后刪除issue-404分支。演示如下:
現(xiàn)在艘刚,我們回到dev分支上干活了管宵。
工作區(qū)是干凈的,那么我們工作現(xiàn)場(chǎng)去哪里呢?我們可以使用命令 git stash list來查看下箩朴。如下:
工作現(xiàn)場(chǎng)還在笛臣,Git把stash內(nèi)容存在某個(gè)地方了,但是需要恢復(fù)一下隧饼,可以使用如下2個(gè)方法:
- git stash apply恢復(fù),恢復(fù)后静陈,stash內(nèi)容并不刪除燕雁,你需要使用命令git stash drop來刪除。
- 另一種方式是使用git stash pop,恢復(fù)的同時(shí)把stash內(nèi)容也刪除了鲸拥。
演示如下
5.多人協(xié)作
當(dāng)你從遠(yuǎn)程庫克隆時(shí)候拐格,實(shí)際上Git自動(dòng)把本地的master分支和遠(yuǎn)程的master分支對(duì)應(yīng)起來了,并且遠(yuǎn)程庫的默認(rèn)名稱是origin刑赶。
- 要查看遠(yuǎn)程庫的信息 使用 git remote
- 要查看遠(yuǎn)程庫的詳細(xì)信息 使用 git remote –v
如下演示
1. 推送分支:
推送分支就是把該分支上所有本地提交到遠(yuǎn)程庫中捏浊,推送時(shí),要指定本地分支撞叨,這樣金踪,Git就會(huì)把該分支推送到遠(yuǎn)程庫對(duì)應(yīng)的遠(yuǎn)程分支上: 使用命令 git push origin master
比如我現(xiàn)在的github上的readme.txt代碼如下:
本地的readme.txt代碼如下:
現(xiàn)在我想把本地更新的readme.txt代碼推送到遠(yuǎn)程庫中,使用命令如下:
我們可以看到如上牵敷,推送成功胡岔,我們可以繼續(xù)來截圖github上的readme.txt內(nèi)容 如下:
可以看到推送成功了,如果我們現(xiàn)在要推送到其他分支枷餐,比如dev分支上靶瘸,我們還是那個(gè)命令
$ git push origin dev
那么一般情況下,哪些分支要推送呢毛肋?master分支是主分支怨咪,因此要時(shí)刻與遠(yuǎn)程同步。
一些修復(fù)bug分支不需要推送到遠(yuǎn)程去润匙,可以先合并到主分支上诗眨,然后把主分支master推送到遠(yuǎn)程去。
2.抓取分支:
多人協(xié)作時(shí)趁桃,大家都會(huì)往master分支上推送各自的修改×苫埃現(xiàn)在我們可以模擬另外一個(gè)同事,可以在另一臺(tái)電腦上(注意要把SSH key添加到github上)或者同一臺(tái)電腦上另外一個(gè)目錄克隆卫病,新建一個(gè)目錄名字叫testgit2
但是我首先要把dev分支也要推送到遠(yuǎn)程去油啤,如下
接著進(jìn)入testgit2目錄,進(jìn)行克隆遠(yuǎn)程的庫到本地來蟀苛,如下:
現(xiàn)在目錄下生成有如下所示:
現(xiàn)在我們的小伙伴要在dev分支上做開發(fā)益咬,就必須把遠(yuǎn)程的origin的dev分支到本地來,于是可以使用命令創(chuàng)建本地dev分支:
$ git checkout –b dev origin/dev
現(xiàn)在小伙伴們就可以在dev分支上做開發(fā)了帜平,開發(fā)完成后把dev分支推送到遠(yuǎn)程庫時(shí)幽告。如下:
小伙伴們已經(jīng)向origin/dev分支上推送了提交梅鹦,而我在我的目錄文件下也對(duì)同樣的文件同個(gè)地方作了修改,也試圖推送到遠(yuǎn)程庫時(shí)冗锁,如下:
由上面可知:推送失敗齐唆,因?yàn)槲业男』锇樽钚绿峤坏暮臀以噲D推送的有沖突,解決的辦法也很簡(jiǎn)單冻河,上面已經(jīng)提示我們箍邮,先用git pull把最新的提交從origin/dev抓下來,然后在本地合并叨叙,解決沖突锭弊,再推送。
git pull也失敗了擂错,原因是沒有指定本地dev分支與遠(yuǎn)程origin/dev分支的鏈接味滞,根據(jù)提示,設(shè)置dev和origin/dev的鏈接:如下:
這回git pull成功钮呀,但是合并有沖突剑鞍,需要手動(dòng)解決,解決的方法和分支管理中的 解決沖突完全一樣行楞。解決后攒暇,再push:
我們可以先來看看readme.txt內(nèi)容了。
現(xiàn)在手動(dòng)已經(jīng)解決完了子房,我接在需要再提交形用,再push到遠(yuǎn)程庫里面去。如下所示:
因此:多人協(xié)作工作模式一般是這樣的:
首先证杭,可以試圖用git push origin branch-name推送自己的修改.
如果推送失敗田度,則因?yàn)檫h(yuǎn)程分支比你的本地更新早,需要先用git pull試圖合并解愤。
如果合并有沖突镇饺,則需要解決沖突,并在本地提交送讲。再用git push origin branch-name推送奸笤。