個(gè)人認(rèn)為男韧,Git是對(duì)開(kāi)發(fā)人員溝通協(xié)作要求更高的源代碼版本管理系統(tǒng)涝涤,使用元數(shù)據(jù)來(lái)管理代碼句占。
Git不同于集中式的SVN,是一種分布式的源代碼管理系統(tǒng)溪胶,Git在本地有完整的代碼倉(cāng)庫(kù)搂擦,在本地也可以實(shí)現(xiàn)版本控制和分支管理。通過(guò)添加遠(yuǎn)程倉(cāng)庫(kù)的的方式哗脖,就可以實(shí)現(xiàn)Git所推崇的多分支多倉(cāng)庫(kù)的源代碼版本管理理念瀑踢。
在第一次在團(tuán)隊(duì)正式任務(wù)中引入使用之前,進(jìn)行過(guò)幾次局部嘗試才避,逐步的了解了一些Git的基本操作和原理橱夭,也看過(guò)一些文章,知道有Gitlab-flow桑逝、Github-flow徘钥、Feature Branch等常用的Git工作流,一直在平時(shí)的工作中進(jìn)行小的嘗試肢娘。
正好在結(jié)合使用CI集成環(huán)境,進(jìn)行快速開(kāi)發(fā)的過(guò)程中舆驶,在團(tuán)隊(duì)中嘗試推行了一次Git工作方式橱健,使用的過(guò)程中也沒(méi)有要求一上來(lái)就能達(dá)到某種工作流的最佳實(shí)踐,以解決實(shí)際開(kāi)發(fā)中的團(tuán)隊(duì)協(xié)作開(kāi)發(fā)作為知道方針沙廉,進(jìn)行開(kāi)放的探索拘荡;結(jié)果在使用過(guò)程中,收獲非常大撬陵, 基本上在過(guò)程中掌握了所有常用的Git命令和工具珊皿。記錄下這次學(xué)習(xí)探索之旅网缝,分享出來(lái),希望對(duì)有興趣學(xué)習(xí)Git的人有幫助蟋定。
1粉臊、項(xiàng)目的創(chuàng)建
這次開(kāi)發(fā)的demo項(xiàng)目要使用某個(gè)CI工具進(jìn)行自動(dòng)化構(gòu)建,并且一鍵部署到演示服務(wù)器上驶兜,所以選用了可以免費(fèi)創(chuàng)建代碼庫(kù)的Gitlab扼仲,配合Gitlab CI進(jìn)行開(kāi)發(fā)和演示;這里用到里代碼庫(kù)創(chuàng)建和遠(yuǎn)程庫(kù)跟蹤的命令
git init
git remote add origin https://git.coding.net/liuwill/webPageTest.git
git pull
當(dāng)然如果本地還沒(méi)有任何代碼抄淑,可以使用git clone來(lái)直接克隆遠(yuǎn)程庫(kù)git clone https://git.coding.net/liuwill/webPageTest.git
屠凶。
2、第一次提交代碼
在Git的原理里面肆资,新創(chuàng)建或者編輯過(guò)的代碼矗愧,是在工作區(qū)里面,而提交的意思郑原,就是將代碼保存到本地倉(cāng)庫(kù)唉韭,中間有一個(gè)暫存區(qū),要提交的代碼必須先添加到暫存區(qū)颤专,才能提交到本地倉(cāng)庫(kù)纽哥。具體用到了add和commit命令;在提交代碼之前栖秕,涉及到的操作包括:將文件添加到暫存區(qū)春塌,提交暫存區(qū)的代碼到本地存庫(kù);添加新文件簇捍;刪除錯(cuò)誤添加的文件只壳。
git add .
git commit -m 'first commit'
執(zhí)行過(guò)程中,可以使用git status
命令暑塑,查看當(dāng)前的工作區(qū)和暫存區(qū)的情況吼句。
如果在過(guò)程中,修改了某個(gè)文件事格,或者添加了新文件惕艳,可以執(zhí)行命令git add filename
,將文件添加在暫存區(qū)驹愚。如果添加暫存區(qū)之后远搪,不想重新發(fā)起一次commit,可以git commit --amend
逢捺,這樣可以把暫存區(qū)的文件谁鳍,合并到上一次commit中。
此外還可以使用git rm filename --cached
來(lái)將添加到暫存區(qū)中的文件,從暫存區(qū)移除倘潜,但是保留本地副本绷柒。
3、將修改過(guò)的代碼推送到遠(yuǎn)程倉(cāng)庫(kù)
完成代碼編輯和本地倉(cāng)庫(kù)的代碼提交之后涮因,就可以將代碼推送到遠(yuǎn)程倉(cāng)庫(kù)
git remote -v
git push origin master
第一個(gè)命令可以查看本地倉(cāng)庫(kù)中已經(jīng)添加的遠(yuǎn)程倉(cāng)庫(kù)废睦;第二個(gè)命令,將本地的master分支推送到origin命名的遠(yuǎn)程倉(cāng)庫(kù)蕊退,且使用master分支郊楣;如果添加-u參數(shù),那么origin/master就會(huì)設(shè)為本地master分支的跟蹤分支瓤荔;如果不想推送到遠(yuǎn)程倉(cāng)庫(kù)的master分支净蚤,執(zhí)行git push origin master:develop
,可以把本地的master分支推送到遠(yuǎn)程倉(cāng)庫(kù)的develop分支上输硝。
4今瀑、創(chuàng)建新分支
在開(kāi)發(fā)過(guò)程中,git推薦使用多分支進(jìn)行開(kāi)發(fā)点把,根據(jù)不同的工作流橘荠,可以有不同的分支命名規(guī)范可以采用;
通忱商樱可以默認(rèn)采用git flow進(jìn)行開(kāi)發(fā)哥童;
1、一般會(huì)在develop分支中進(jìn)行開(kāi)發(fā)褒翰,然后在發(fā)布的時(shí)候贮懈,將代碼合并到master分支;
2优训、如果需要朵你,還會(huì)使用feature branch、hotfix branch和release branch分別用來(lái)進(jìn)行特性開(kāi)發(fā)揣非、修復(fù)補(bǔ)丁抡医、或者發(fā)布版本
git branch new-branch
git checkout -b new-branch
兩種命令都可以用來(lái)創(chuàng)建新的分支,checkout直接將當(dāng)前工作分支切換到新建的分支上
5早敬、獲取遠(yuǎn)程分支代碼
如果需要獲取遠(yuǎn)程分支忌傻,或者同步最新的代碼,可以直接git pull origin develop
搞监,從遠(yuǎn)程倉(cāng)庫(kù)拉取origin/develop分支芯勘。
或者使用fetch命令
git fetch origin develop
git log -p develop..origin/develop
git merge origin/develop
執(zhí)行之后,就可以把遠(yuǎn)程倉(cāng)庫(kù)的develop分支合并到本地的當(dāng)前工作分支下腺逛。
6、在分支中進(jìn)行開(kāi)發(fā)
如果在團(tuán)隊(duì)中使用feature branch進(jìn)行開(kāi)發(fā),并且多個(gè)feature同時(shí)進(jìn)行開(kāi)發(fā)的話棍矛,開(kāi)發(fā)過(guò)程中安疗,不同的特性完成并合并到主分支的時(shí)間是不一樣的,在最后合并代碼的時(shí)候够委,可能會(huì)產(chǎn)生將多的沖突需要處理荐类。這個(gè)時(shí)候可以使用rebase命令,在開(kāi)發(fā)過(guò)程中茁帽,及時(shí)同步最新的代碼玉罐,從而避免最后merge的時(shí)候,處理大量的沖突潘拨;
git checkout master
git pull
git checkout feature-x
git rebase master
如果出現(xiàn)代碼沖突的話吊输,打開(kāi)文件處理沖突,處理完之后铁追,可以繼續(xù)進(jìn)行rebase
git add conflict_filename
git rebase --continue
如果要放棄本次合并季蚂,使用git rebase --abort
命令,就會(huì)取消本次rebase操作琅束。在rebase之前扭屁。
7、處理開(kāi)發(fā)過(guò)程中的沖突
如果在合并代碼涩禀,或者獲取遠(yuǎn)程倉(cāng)庫(kù)代碼之前料滥,本地還有不想提交或者未完成的代碼,可以使用stash命令艾船,先將代碼放到棧中暫存起來(lái)葵腹,等完成代碼更新之后,在取出未完成的代碼丽声,繼續(xù)進(jìn)行操作礁蔗。具體操作如下:
git stash
## do something
git stash list
git stash pop stash@{0}
8、遠(yuǎn)程倉(cāng)庫(kù)管理
此外雁社,在開(kāi)發(fā)過(guò)程中浴井,因?yàn)槌掷m(xù)集成部署的需要,可能會(huì)使用不同的遠(yuǎn)程倉(cāng)庫(kù)來(lái)完成不同的構(gòu)建策略霉撵;或者對(duì)遠(yuǎn)程倉(cāng)庫(kù)的代碼進(jìn)行管理磺浙,還用到了一些基本的命令;
刪除遠(yuǎn)程分支:
git push --delete origin feature-x
添加多個(gè)遠(yuǎn)程倉(cāng)庫(kù):git remote add deploy http://giturl/repo.git
將代碼強(qiáng)制推送到遠(yuǎn)程倉(cāng)庫(kù):git push -f deploy develp
這篇文章是系列文章的第一篇徒坡,簡(jiǎn)單的介紹了在一次Git團(tuán)隊(duì)協(xié)作開(kāi)發(fā)中用到的基本命令撕氧,接下來(lái)的一系列文章中,將會(huì)分主題對(duì)git學(xué)習(xí)使用過(guò)程中的各種相關(guān)知識(shí)和體會(huì)進(jìn)行介紹喇完。