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)建 開(kāi)發(fā)分支
feature/* 用于開(kāi)發(fā)新的功能,不同的功能創(chuàng)建不同的功能分支,功能分支開(kāi)發(fā)完成并自測(cè)通過(guò)之后,需要合并到 develop 分支,之后刪除該分支 功能分支
bugfix/* 用于修復(fù)不緊急的 bug ,普通 bug 均需要?jiǎng)?chuàng)建 bugfix 分支開(kāi)發(fā),開(kāi)發(fā)完成自測(cè)沒(méi)問(wèn)題后合并到 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 需要開(kāi)發(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è)人開(kāi)發(fā),那么這確實(shí)沒(méi)多大用處,當(dāng)你在一個(gè)團(tuán)隊(duì)時(shí)這就發(fā)揮了很大的作用。

一般情況下,master分支是和線上版本保持一致的,那么我們需要對(duì)她非常重視,一切開(kāi)發(fā)任務(wù)都不能在這里進(jìn)行,因?yàn)樵陂_(kāi)發(fā)過(guò)程中如果出現(xiàn)bug就會(huì)弄臟master分支,如果我們?cè)赿evelop分支上
開(kāi)發(fā),不管出什么錯(cuò)誤我們都不需要怕,因?yàn)閙aster是干凈的,實(shí)在不行可以從master重新拉取沒(méi)有問(wèn)題的項(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é)找到了開(kāi)發(fā)同學(xué),開(kāi)發(fā)同學(xué)在release分支上修改好問(wèn)題,所有問(wèn)題都解決了,這時(shí)release分支合并到master分支和develop分支。這時(shí)開(kāi)發(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)境下開(kāi)發(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è)沒(méi)有忽略的直接在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文件解決問(wèn)題”
$ 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)解決問(wèn)題。因此,一旦有沖突產(chǎn)生,最好雙方進(jìn)行合理交流達(dá)成一致意見(jiàn)。減少?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ù)的道路上摸爬滾打;
熱愛(ài)生活,熱愛(ài)技術(shù);如果喜歡記得點(diǎn)贊;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容