分享是最好的記憶--
如需轉(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里面什么后悔藥都有的。
工作流程:
克隆項(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è)沒有忽略的直接在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)贊虑润;