Git 小團(tuán)隊(duì)的協(xié)作 (一)

Android-自定義View

分享是最好的記憶--
如需轉(zhuǎn)發(fā)請(qǐng)注明出處

http://www.egef111.sh.cn/blog/git/00101.html

[強(qiáng)調(diào)]:共同學(xué)習(xí) 共同進(jìn)步 不喜勿噴


Git 分支說(shuō)明 目錄

  • Branch 分類
  • Branch 功能詳解
  • Branch 命令規(guī)范

Branch 分類 :

分支名 期限 備注
master 長(zhǎng)期 與線上同步
develop 長(zhǎng)期 相對(duì)穩(wěn)定版本
feature/* 短期 develop創(chuàng)建
bugfix/* 短期 develop創(chuàng)建
release/* 短期 develop創(chuàng)建
hotfix/* 短期 master創(chuàng)建

Branch 功能詳解 :

分支名 作用 備注
master 負(fù)責(zé)記錄上線版本的迭代拔恰,該分支代碼與線上代碼是完全一致的 主分支
develop 該分支記錄相對(duì)穩(wěn)定的版本询件,所有的 feature 分支和 bugfix 分支都從該分支創(chuàng)建 開發(fā)分支
feature/* 用于開發(fā)新的功能,不同的功能創(chuàng)建不同的功能分支蜘矢,功能分支開發(fā)完成并自測(cè)通過(guò)之后,需要合并到 develop 分支,之后刪除該分支 功能分支
bugfix/* 用于修復(fù)不緊急的 bug ,普通 bug 均需要?jiǎng)?chuàng)建 bugfix 分支開發(fā)颠通,開發(fā)完成自測(cè)沒問題后合并到 develop 分支后,刪除該分支 bug 修復(fù)分支
release/* 用于代碼上線準(zhǔn)備膀懈,該分支從 develop 分支創(chuàng)建顿锰,創(chuàng)建之后由測(cè)試同學(xué)發(fā)布到測(cè)試環(huán)境進(jìn)行測(cè)試,測(cè)試過(guò)程中發(fā)現(xiàn) bug 需要開發(fā)人員在該 release 分支上進(jìn)行 bug 修復(fù),所有 bug 修復(fù)完后撵儿,在上線之前乘客,需要合并該 release 分支到 master 分支和 develop 分支 發(fā)布分支
hotfix/* 該分支只有在緊急情況下使用,從 master 分支創(chuàng)建淀歇,用于緊急修復(fù)線上 bug易核,修復(fù)完成后,需要合并該分支到 master 分支以便上線浪默,同時(shí)需要再合并到 develop 分支 緊急 bug 修復(fù)分支

Branch 命令規(guī)范 :

分支名 命名規(guī)范 示例
功能分支 feature/功能名稱 feature/login
bug修復(fù)分支 bugfix/bug名稱 bugfix/add-user
緊急 bug 修復(fù)分支 hotfix/bug名稱 hotfix/delete
release分支 release/預(yù)發(fā)布版本名稱 release/add-user

進(jìn)入正題

我們剛剛熟悉了git中常用到的分支牡直,那么這些分支有什么意義呢? 我就這么說(shuō)吧纳决,如果你是一個(gè)人開發(fā)碰逸,那么這確實(shí)沒多大用處,當(dāng)你在一個(gè)團(tuán)隊(duì)時(shí)這就發(fā)揮了很大的作用阔加。

一般情況下饵史,master分支是和線上版本保持一致的,那么我們需要對(duì)她非常重視胜榔,一切開發(fā)任務(wù)都不能在這里進(jìn)行胳喷,因?yàn)樵陂_發(fā)過(guò)程中如果出現(xiàn)bug就會(huì)弄臟master分支,如果我們?cè)赿evelop分支上
開發(fā)夭织,不管出什么錯(cuò)誤我們都不需要怕吭露,因?yàn)閙aster是干凈的,實(shí)在不行可以從master重新拉取沒有問題的項(xiàng)目對(duì)不對(duì)尊惰?
這個(gè)就是分支其中一個(gè)作用讲竿。

現(xiàn)在是這樣的情況:我們?cè)赿evelop分支上完成了項(xiàng)目,那么之后對(duì)各個(gè)分支怎么處理呢弄屡?
過(guò)程大致是這樣的: 將我們的develop分支合并到release分支题禀,這是以個(gè)預(yù)發(fā)布分支,這個(gè)預(yù)發(fā)布分支是交給測(cè)試的同學(xué)的膀捷,測(cè)試同學(xué)在release分支上拉取完整項(xiàng)目進(jìn)行測(cè)試迈嘹,在測(cè)試過(guò)程中發(fā)現(xiàn)了一個(gè)bug。
測(cè)試同學(xué)找到了開發(fā)同學(xué)担孔,開發(fā)同學(xué)在release分支上修改好問題江锨,所有問題都解決了吃警,這時(shí)release分支合并到master分支和develop分支糕篇。這時(shí)開發(fā)同學(xué)的develop分支是最新的,master分支也是最新的酌心。

另外一種情況是這樣的:線上產(chǎn)品使用過(guò)程中突然出現(xiàn)了一個(gè)bug拌消,這是非常緊急的情況,這時(shí)需要處理的步驟大致如下:創(chuàng)建一個(gè)緊急bug分支名為hotfix(命名規(guī)則看上表),將master分支拉取到hotfix分支墩崩,
緊急修改完bug之后將hotfix同步到master分支和develop分支氓英,再刪除hotfix分支。世界就回復(fù)平靜了鹦筹!

總之分支會(huì)讓你在更安全的環(huán)境下開發(fā)铝阐,git里面什么后悔藥都有的。

工作流程:

  1. 克隆項(xiàng)目

  2. 簽出并創(chuàng)建 dev 分支铐拐,使其跟蹤遠(yuǎn)程的 origin/dev 分支徘键。

  3. 在dev分支基礎(chǔ)上創(chuàng)建自己的分支 member* 。

  4. 在自己的分支上添加文件

  5. 在自己的分支上修改文件

  6. 合并到dev分支

  7. 推送dev分支到origin/dev分支

  8. 更新 .gitignore 文件從 dev 新建一個(gè)分支 ignore (如果預(yù)測(cè)變更頻繁就建立一個(gè)遠(yuǎn)程分支遍蟋,現(xiàn)在一般都有模板吹害,偶爾有個(gè)沒有忽略的直接在dev分支上改就可以了)更新忽略文件盡快合并到\推送到 origin/dev 分支 (避免兩個(gè)組員同時(shí)更改該文件造成沖突。)

1 創(chuàng)建本地倉(cāng)庫(kù)

$ git clone https://coding.net/tangyikejun/GitTest2.git
$ git checkout -u -b dev origin/dev
$ git checkout -b [MEMBER_NAME];

2.更新本地倉(cāng)庫(kù)

$ git add .
$ git commit -m”your comments”
       // …                                               // 多次提交后完成了一項(xiàng)新的功能虚青,自己的分支下能正常運(yùn)行
$ git checkout dev
$ git merge --no-ff [MEMBER_NAME]                       // [MEMBER_NAME] 是自己的分支名稱
$ git push

3.更新 .gitignore 文件

$ git checkout dev
        //…                                               // 更新忽略文件
$ git add .
$ git commit -m“更新.gitignore文件”
$ git push

4.常用查詢命令

$ git branch                                            // 查看自己所在分支 以及自己所擁有的分支
$ git log --pretty=“%h - %cn(%ci): %s” --graph          // 查看自己的提交記錄
$ git reflog                                            // 查看自己的操作歷史
$ git status                                            // 查看本地倉(cāng)庫(kù)當(dāng)前的文件狀態(tài)
$ git blame [FILE_PATH]                                 // 查看文件的每一部分最后由誰(shuí)改動(dòng)

5.意外情況處理意外:

推送代碼到遠(yuǎn)程 dev 分支時(shí)發(fā)生沖突它呀。解決方案:先把 遠(yuǎn)程倉(cāng)庫(kù)的 origin/dev 分支拉取下來(lái),解決沖突文件后再推送棒厘。平時(shí)的時(shí)候盡量避免不同組員更改同一個(gè)文件纵穿。

$ git push

       // …                                               // 遇到錯(cuò)誤

$ git pull

       // …                                               // 解決沖突

$ git add .
$ git commit -m”solve conflict:由于XX原因出錯(cuò),修改XX文件解決問題”
$ git push

意外:不小心把自己的工作成果push到了master分支绊谭。解決方案:先對(duì)master進(jìn)行回退政恍,再使用git push -f將錯(cuò)誤的提交刪除。意外:錯(cuò)誤地把文件添加到git倉(cāng)庫(kù)并推送到了遠(yuǎn)程达传。解決方案:先將文件從git倉(cāng)庫(kù)中移除篙耗,但是保留工作目錄中的對(duì)應(yīng)文件。然后將該文件添加到忽略文件中宪赶,再重新進(jìn)行提交宗弯。命令如下:

$ git rm --cached [FILE_PATH]
        …                                               // 將該文件添加到 .gitignore 文件
$ git add .
$ git commit -m"detach file XXX"
$ git push

三、預(yù)發(fā)布責(zé)任人 & 版本修復(fù)責(zé)任人

1.預(yù)發(fā)布責(zé)任人當(dāng)需要發(fā)布新的版本時(shí)搂妻,預(yù)發(fā)布責(zé)任人:基于最新的 dev 分支創(chuàng)建一個(gè) release-版本號(hào) 分支進(jìn)行修繕工作合并到 dev 分支合并到 master 分支打標(biāo)簽刪除 release-版本號(hào) 分支

$ git checkout dev
$ git pull
$ git checkout -b release-1.2
        //…                                               // 進(jìn)行修繕工作
$ git checkout dev
$ git merge --no-ff release-1.2
$ git checkout master
$ git merge --no-ff release-1.2                         // 在評(píng)論中寫入相比上個(gè)版本新增的功能蒙保,修復(fù)的bug等詳細(xì)內(nèi)容
$ git tag v1.2
$ git branch -d release-1.2

使用 git show [TAG_NAME]可以查看標(biāo)簽對(duì)應(yīng)的提交信息。

2.版本修復(fù)責(zé)任人當(dāng)新發(fā)布的版本發(fā)現(xiàn) bug 時(shí)欲主,版本修復(fù)責(zé)任人:基于最新的 master 分支創(chuàng)建一個(gè) hotfix-版本號(hào) 分支進(jìn)行debug工作合并到 master 分支打標(biāo)簽合并到 dev 分支刪除 hotfix-版本號(hào) 分支

$ git checkout master
$ git pull
$ git checkout -b hotfix-1.2.1
        //…                                               // 進(jìn)行修繕工作
$ git checkout master
$ git merge --no-ff hotfix-1.2.1
$ git tag v1.2.1
$ git checkout dev
$ git merge --no-ff hotfix-1.2.1                        // 在評(píng)論中寫入修復(fù)的bug等詳細(xì)內(nèi)容
$ git branch -d hotfix-1.2.1

3.意外情況處理意外:某組員完成自己的任務(wù)后合并到 dev 分支邓厕,推送時(shí)發(fā)現(xiàn) release 分支的修繕工作更改了自己原來(lái)的文件,產(chǎn)生了沖突扁瓢。解決方案:把 origin/dev 分支拉取下來(lái)详恼,將沖突解決后再次提交。(注意這里解決沖突后 master 分支上的文件與該組員的工作成果依舊是有沖突的引几。除非該組員解決沖突時(shí)不更改 relese 時(shí)的修繕代碼昧互,而僅僅更改自己的代碼來(lái)解決問題。因此,一旦有沖突產(chǎn)生敞掘,最好雙方進(jìn)行合理交流達(dá)成一致意見叽掘。減少?zèng)_突。)四玖雁、成員遠(yuǎn)程倉(cāng)庫(kù)當(dāng)某個(gè)團(tuán)隊(duì)成員希望其他成員協(xié)助完成他的編程任務(wù)時(shí)更扁,該成員可以為自己的本地倉(cāng)庫(kù)創(chuàng)建一個(gè)遠(yuǎn)程倉(cāng)庫(kù)作為成員遠(yuǎn)程倉(cāng)庫(kù),方便其他成員協(xié)助赫冬。建立成員遠(yuǎn)程倉(cāng)庫(kù)可以避免中心遠(yuǎn)程倉(cāng)庫(kù)的代碼交流繁雜混亂疯潭。成員遠(yuǎn)程倉(cāng)庫(kù)在在操作上是中心遠(yuǎn)程倉(cāng)庫(kù)的簡(jiǎn)化版。僅在細(xì)微處有所不同面殖。

1.求助者創(chuàng)建成員遠(yuǎn)程倉(cāng)庫(kù)添加成員遠(yuǎn)程倉(cāng)庫(kù)推送自己的分支到成員遠(yuǎn)程倉(cāng)庫(kù)的 master 分支拉取成員遠(yuǎn)程倉(cāng)庫(kù)的 master 分支到自己的分支

$ git remote add [ALIAS_NAME] [GIT_ADRESS]
$ git push [ALIAS_NAME]  [BRANCH_NAME]:[BRANCH_NAME_REMOTE]

$ git pull

舉例:

$ git remote add binRepo https://coding.net/chenbin/GitTest2.git
$ git push binbin  binRepo:master                               //由于是第一次推送竖哩,該操作已經(jīng)使得分支binbin 跟蹤了遠(yuǎn)程分支 binRepo/mastr

當(dāng)某個(gè)分支 a 跟蹤了遠(yuǎn)程分支 b,即 b 成為 a 的默認(rèn)拉取來(lái)源脊僚,也因此相叁,一個(gè)本地分支同一時(shí)間只能跟蹤一個(gè)遠(yuǎn)程分支。讓本地某分支跟蹤遠(yuǎn)程分支的命令

$ git branch -u [REPO_NAME]/[REMOTE_BRANCH_NAME] [BRANCH_NAME]
// git branch -u binRepo/master binbin

2.協(xié)助者克隆成員遠(yuǎn)程倉(cāng)庫(kù)在 master 分支基礎(chǔ)上創(chuàng)建自己的分支 member*在自己的分支上修改代碼合并到 master 分支后推送到成員遠(yuǎn)程倉(cāng)庫(kù)

$ git clone https://coding.net/chenbin/GitTest2.git
$ git checkout -b member1;
        //…                                                       //修改代碼
$ git add .
$ git commit -m"我?guī)湍惆裍X功能完成了"
$ git checkout --no-ff merge member1;
$ git push

git 關(guān)于分支的常用命令:

查看分支: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>

重命名分支:git branch -m oldbranchname newbranchname

我是ElyarAnwar辽幌,在技術(shù)的道路上摸爬滾打增淹;
熱愛生活,熱愛技術(shù)乌企;如果喜歡記得點(diǎn)贊虑润;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市加酵,隨后出現(xiàn)的幾起案子拳喻,更是在濱河造成了極大的恐慌,老刑警劉巖猪腕,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冗澈,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡陋葡,警方通過(guò)查閱死者的電腦和手機(jī)亚亲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)腐缤,“玉大人捌归,你說(shuō)我怎么就攤上這事×朐粒” “怎么了惜索?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)绍在。 經(jīng)常有香客問我门扇,道長(zhǎng),這世上最難降的妖魔是什么偿渡? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任臼寄,我火速辦了婚禮,結(jié)果婚禮上溜宽,老公的妹妹穿的比我還像新娘吉拳。我一直安慰自己,他們只是感情好适揉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布留攒。 她就那樣靜靜地躺著,像睡著了一般嫉嘀。 火紅的嫁衣襯著肌膚如雪炼邀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天剪侮,我揣著相機(jī)與錄音拭宁,去河邊找鬼。 笑死瓣俯,一個(gè)胖子當(dāng)著我的面吹牛杰标,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播彩匕,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼腔剂,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了驼仪?” 一聲冷哼從身側(cè)響起掸犬,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绪爸,沒想到半個(gè)月后登渣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毡泻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年胜茧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仇味。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡呻顽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出丹墨,到底是詐尸還是另有隱情廊遍,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布贩挣,位于F島的核電站喉前,受9級(jí)特大地震影響没酣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卵迂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一裕便、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧见咒,春花似錦偿衰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至宝当,卻和暖如春视事,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背庆揩。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工郑口, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盾鳞。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓犬性,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親腾仅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乒裆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

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