Git 基本操作、開發(fā)流程實踐總結(jié)

讀前聲明:非原創(chuàng)孵班,轉(zhuǎn)載自占小狼的博客公眾號

一、Git 是什么

Git 是一個分布式的代碼管理容器招驴,本地和遠端都保有一份相同的代碼重父。

?Git 倉庫主要是由是三部分組成:本地代碼,緩存區(qū)忽匈,提交歷史房午,這幾乎是所有操作的本質(zhì),但是為了文章更加簡單易懂丹允,就不圍繞這塊展開了郭厌,有興趣的可以去了解下。

?開門見山雕蔽,我們直接來說說 Git 有哪些常見的操作折柠。

二、Git 常規(guī)操作

簡單說說Git有哪些常規(guī)操作批狐,能夠讓我們應(yīng)付簡單的開發(fā)需求扇售。

克隆代碼

? 克隆遠端代碼

????? git clone http://git.code.oa.com/QCFE/sqlserver.git (換成自己的地址)

? 查看本地的代碼狀態(tài)

?????? git status

?????????????????????????

? 同步遠端分支變化

???? ?git fetch origin master

??????git fetch

??????git fetch -p

? 同步遠端代碼變化。

??????git pull origin master

????? git pull -r origin master

關(guān)于 git merge 和 git rebase 各自的優(yōu)劣嚣艇,后文會詳細介紹承冰。這部分主要介紹了關(guān)于代碼克隆,同步遠端代碼變化的相關(guān)操作食零。接下來困乒,我們看看關(guān)于本地代碼的一些操作。

操作 commit

首先我們要明確一個概念:就是每個 commit 都是一份完整的代碼狀態(tài)贰谣,用一個 commitID 來唯一標志娜搂。

?????????????????????????

從某個角度上來說,Git維護的就是一個commitID樹吱抚,分別保存著不同狀態(tài)下的代碼百宇。 所以你對代碼的任何修改,最終都會反映到 commit 上面去秘豹。

?? 新增 commit

????? git add files

??????git commit -m '提交備注'

?? 撤銷 commit

????? git reset b14bb52

????? git reset --hard b14bb52

??????git checkout -- files

? 合并 commit

?????合并 commit携御,本質(zhì)上合并兩份不同狀態(tài)下的代碼。

????? git merge master

????? git rebase master

??? 那么 git rebase 和 git merge 到底有什么區(qū)別呢? merge是兩個分支處理沖突后因痛,新增一個 commit 追加到master上。 rebase是將someFeature分支上的commit記錄追加到主分支上岸更,值得注意的是鸵膏,這個時候他的commit其實已經(jīng)發(fā)生變化。

?????????????????????????

相對來說怎炊,git merge 處理沖突更直接谭企,而git rebase 能夠保證清晰的 commit 記錄。

?合并 commit 的時候评肆,通常會發(fā)生沖突债查。 可以全局搜索特殊字符比如<<<,找到需要處理的代碼位置瓜挽,然后認真分析應(yīng)該保留哪一部分代碼盹廷。

???????????

在團隊協(xié)作的時候,分支是必不可少的久橙。那么應(yīng)該如何對分支進行操作呢俄占?

操作分支

所謂的分支其實就是一個指向 commitID 的指針,你可以去.git/refs/heads里去看看淆衷。

???????????

通常情況下缸榄,我們建議分支至少能夠明確的標記功能名稱,如果能標記用戶就更好了祝拯,比如qixiu/feature甚带。

?? 查看分支

???????????

可以同時看到本地分支和遠端分支,配合上前文介紹的 git fetch -p 可以第一時間查看到最新的分支信息佳头。

? 新增本地分支

?其實就是創(chuàng)建一個指針指向某一個 commitID鹰贵。

git checkout -b qixiu/feature

git checkout qixiu/feature

? 刪除本地分支

其實就是移除一個指向 commitID 的指針。

?git branch -d qixiu/feature

git branch -D qixiu/feature

? 新增遠端分支

通常情況下康嘉,我們是新建本地分支砾莱,然后更新到遠端的方式來新增一個遠端分支

?git push origin qixiu/feature

? 刪除遠端分支

?同樣,我們也是通過更新到遠端的方式來刪除一個遠端分支

git push origin :qixiu/feature

簡單匯總一下 上面說的可能有些分散凄鼻,這兒簡單總結(jié)一下有哪些經(jīng)常使用的操作:

git status

git add files

git commit -m '提交內(nèi)容的備注'

git checkout -b branchName

?git fetch -p

git pull -r origin branchName

git push origin branchName

以上幾條命令已經(jīng)能夠應(yīng)付日常的操作腊瑟,稍微復(fù)雜一些的場景后文會介紹。

基于基本操作块蚌,在實際項目中闰非,我們應(yīng)該怎么利用 Git 實現(xiàn)協(xié)作呢?

三峭范、Git 一些較好的實踐

Git 有一些成熟的開發(fā)流程财松,比較主流的有兩種:

?基于功能分支的開發(fā)流程

GitFlow開發(fā)流程

相對來時,我更推薦前者,如果是復(fù)雜的大型項目辆毡,推薦GitFlow開發(fā)流程菜秦。

?接下來,簡單介紹下這兩種協(xié)作模式舶掖。

基于功能分支的協(xié)作模式

基于功能分支的開發(fā)流程其實就是一句話:用分支來承載功能開發(fā)球昨,開發(fā)結(jié)束之后就合并到 master 分支。

?他的優(yōu)點是能夠保證master分支的整潔眨攘,同時還能讓分支代碼邏輯集中主慰,也便于 CodeReview。

分支命名規(guī)范

推薦使用如下格式:ownerName/featureName鲫售。

這樣既便于知道分支覆蓋的功能共螺,也便于找到分支的負責人。以后清理分支的時候也很方便情竹。 開發(fā)流程

? 從 master 切出一個新分支

?git checkout -b qixiu/newFeature

? 開發(fā)一些新功能藐不,然后提交

建議較多頻次的提交代碼到本地倉庫,以便能夠更靈活的保存或撤銷修改秦效。

?此外為了保證提交日志的清晰佳吞,建議備注清楚的注釋。

?git status

git add files // 挑選需要提交的文件棉安,或者全部提交

git commit -m '提交備注'

git push origin qixiu/newFeature

? 如果功能開發(fā)完成底扳,可以發(fā)起一個CodeReview流程

? 如果代碼測試通過,合并到 master贡耽,然后準備上線

// 冗余版 合并到 master

git checkout master

git pull -r origin master

git checkout qixiu/newFeature

git rebase master

?// 處理沖突

git checkout master

git merge qixiu/newFeature

git push origin master

// 精簡版 合并到 master

git checkout qixiu/newFeature

git pull -r origin master

// 將master的代碼更新下來衷模,并且rebase處理沖突

git push origin master // 將本地代碼更新到遠端

有幾點需要注意:

不要在master合并代碼,保證master的可用性很重要

確保在正確的分支執(zhí)行正確的操作

無論是處理沖突還是更新遠端代碼蒲赂,請保有敬畏之心

到此阱冶,一個正常的基于功能分支的開發(fā)流程就完成了 接下來看看另外一個開發(fā)流程。

?GitFlow 開發(fā)流程

?GitFlow 比前文講的基于功能分支的開發(fā)流程要復(fù)雜得多滥嘴,它更適合大型的復(fù)雜項目木蹬。

它圍繞項目發(fā)布流程定義了一個嚴格的分支模型,所有的開發(fā)流程都是圍繞這個嚴格的分支模型進行若皱。 而這個模型約定了每個分支的角色镊叁,以及他們?nèi)绾螠贤ā?/p>

?我們先來看看 GitFlow 開發(fā)流程中幾個約定的分支,以及他們各自承擔的角色是怎么樣的走触?

???????????

? Master分支:用于存放線上版本代碼,可以方便的給代碼打版本號敛腌。

?? Develop分支:用于整合 Feature 分支。

? Feature分支:某個功能的分支像樊,從 Develop 分支切出尤莺,并且功能完成時又合并回 Develop 分支,不直接和 Master 分支交互生棍。

? Release分支:通常對應(yīng)一個迭代。將一個版本的功能全部合并到 Develop 分支之后,從 Develop 切出一個 Release 分支韩脑。這個分支不在追加新需求氢妈,可以完成 bug 修復(fù)、完善文檔等工作段多。務(wù)必記住首量,代碼發(fā)布后进苍,需要將其合并到 Master 分支,同時也要合并到 Develop 分支觉啊。

?? Hotfix分支:緊急修復(fù)的分支杠人,是唯一可以從 Master 切出的分支,一旦修復(fù)了可以合并到 Master 分支和 Develop 分支嗡善。

從每個分支的功能和約定可以看出,它流程多約束多罩引,對于小規(guī)模應(yīng)用并不適合。 當然 GitFlow 有一些輔助工具 gitflow 可以自動化的完成這些任務(wù)揭蜒,對于大型項目也很有幫助剔桨。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市偶垮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脚猾,老刑警劉巖砚哗,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蛛芥,居然都是意外死亡仅淑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門赡鲜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庐船,“玉大人,你說我怎么就攤上這事筐钟。” “怎么了壮韭?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵纹因,是天一觀的道長。 經(jīng)常有香客問我屯曹,道長惊畏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任偷俭,我火速辦了婚禮缰盏,結(jié)果婚禮上淹遵,老公的妹妹穿的比我還像新娘负溪。我一直安慰自己,他們只是感情好川抡,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布崖堤。 她就那樣靜靜地躺著,像睡著了一般楔脯。 火紅的嫁衣襯著肌膚如雪老玛。 梳的紋絲不亂的頭發(fā)上钧敞,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音镜廉,去河邊找鬼愚战。 笑死,一個胖子當著我的面吹牛寂玲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播想许,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼断序,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了漱凝?” 一聲冷哼從身側(cè)響起诸迟,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤愕乎,失蹤者是張志新(化名)和其女友劉穎扣典,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笛粘,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡湿硝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年关斜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片痢畜。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡丁稀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出线衫,到底是詐尸還是另有隱情,我是刑警寧澤枯跑,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布白热,位于F島的核電站,受9級特大地震影響纳击,放射性物質(zhì)發(fā)生泄漏乍恐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一百匆、第九天 我趴在偏房一處隱蔽的房頂上張望呜投。 院中可真熱鬧存璃,春花似錦雕拼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至磷醋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間邓线,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工震庭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缩歪,地道東北人谍憔。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓习贫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親苫昌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

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