
分享是最好的記憶--
如需轉(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里面什么后悔藥都有的。
工作流程:
克隆項(xiàng)目
簽出并創(chuàng)建 dev 分支,使其跟蹤遠(yuǎn)程的 origin/dev 分支。
在dev分支基礎(chǔ)上創(chuàng)建自己的分支 member* 。
在自己的分支上添加文件
在自己的分支上修改文件
合并到dev分支
推送dev分支到origin/dev分支
更新 .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)贊;