创新小组 实战Git团队企操作手册_精华版本
文章目錄
- 一、入門(mén)試煉
- 1. Git命令理解+準(zhǔn)則
- 2. Git分支換分思路
- 3. 線上發(fā)布準(zhǔn)備
- 二、 實(shí)戰(zhàn)前期準(zhǔn)備
- 二、場(chǎng)景實(shí)戰(zhàn)
- 模擬提交準(zhǔn)備
- 3.1. Git合并某個(gè)分支的某一/多次提交到指定分支
- 3.2. Git合并分支
- 3.3. 回滾/撤銷指定某一/多次提交(建議使用,雁過(guò)留聲、人過(guò)留名)
- 3.4. Git合并沖突
- 3.5. Git刪除中間某一/多次提交記錄和提交的文件
- 3.6. 撤銷回滾未未添加至?xí)捍鎱^(qū)文件
- 3.7. 回退到以前的指定版本,之后提交的記錄和提交的文件全部刪除
這篇Git團(tuán)隊(duì)操作手冊(cè),模擬企業(yè)真實(shí)不同場(chǎng)景,實(shí)戰(zhàn)團(tuán)隊(duì)一起怎樣使用Git?
為什么這樣使用Git?由我的真實(shí)經(jīng)驗(yàn)總結(jié)而成,希望能夠幫助小伙伴們提前熟悉企業(yè)中是怎樣使用Git的環(huán)境。
一、入門(mén)試煉
1. Git命令理解+準(zhǔn)則
1.初始化倉(cāng)庫(kù)用 git init 2.提交用git commit -m"提交說(shuō)明" 3.推送遠(yuǎn)程用git push origin 本地分支名 4.拉取項(xiàng)目用 git clone 項(xiàng)目地址 5.回退文件人2種:未提交用git checkout提交后的用git revert 6.刪除姿勢(shì)有2步:刪除指定提交和提交文件用git rebase 回退到之前的指定提交歷史節(jié)點(diǎn),刪除之后的提交記錄和提交文件用:git reset --hard 7.更新項(xiàng)目用git pull 8.和遠(yuǎn)程倉(cāng)庫(kù)建立連接:git remote add origin 遠(yuǎn)程項(xiàng)目地址擴(kuò)展彩蛋: 9. 禁止向集成分支執(zhí)行那些操作命令?1> 禁止向集成分支執(zhí)行變更歷史的操作<git rebase -i>2> 禁止向集成分支執(zhí)行刪除提交記錄和提交文件的操作<git rebase -i>3> 禁止向集成分支執(zhí)行強(qiáng)制推送遠(yuǎn)程操作操作git push -f origin <本地分支名>2. Git分支換分思路
一般企業(yè)根據(jù)不同的環(huán)境劃分為不同的分支,這樣做的好處就是,分工明確、互不影響。簡(jiǎn)言之,開(kāi)發(fā)負(fù)責(zé)開(kāi)發(fā)、測(cè)試只負(fù)責(zé)測(cè)試。
常見(jiàn)的分支劃分策略如下:
| local | 本地開(kāi)發(fā)環(huán)境 | 本地開(kāi)發(fā)+單元測(cè)試 |
| dev | 技術(shù)開(kāi)發(fā)環(huán)境 | 技術(shù)測(cè)試,有專門(mén)的測(cè)試人員 |
| test | 回歸測(cè)試環(huán)境 | 模擬生產(chǎn)線上環(huán)境預(yù)測(cè)試 |
| uat | 壓測(cè)環(huán)境 | 測(cè)試服務(wù)器瓶頸 |
| master(prod) | 生產(chǎn)環(huán)境 | 線上已發(fā)布,正在正式運(yùn)行的項(xiàng)目 |
3. 線上發(fā)布準(zhǔn)備
一般正式環(huán)境發(fā)布之前會(huì)做這幾件事:
| ① | 拆板 | 把與自己無(wú)關(guān)的版本拆除調(diào) |
| ② | 合版 | 核對(duì)自己發(fā)布文件版本 |
| ③ | 發(fā)布 | 將核對(duì)無(wú)誤的版本發(fā)布到測(cè)試環(huán)境 |
| ④ | 技術(shù)測(cè)試 | 測(cè)試發(fā)布后的程序,有問(wèn)題讓開(kāi)發(fā)協(xié)助修改,沒(méi)問(wèn)題發(fā)布回歸測(cè)試環(huán)境 |
| ⑤ | 回歸測(cè)試 | 測(cè)試技術(shù)環(huán)境沒(méi)問(wèn)題的功能點(diǎn),模擬生產(chǎn)測(cè)試(此環(huán)境和生產(chǎn)環(huán)境一樣的) |
| ⑥ | 發(fā)布上線 | 發(fā)布回歸測(cè)試環(huán)境,測(cè)試成功的功能點(diǎn) |
二、 實(shí)戰(zhàn)前期準(zhǔn)備
1.在遠(yuǎn)程倉(cāng)庫(kù)創(chuàng)建kernel_system項(xiàng)目 2.將遠(yuǎn)程倉(cāng)庫(kù)克隆到本地 3.初始化項(xiàng)目,添加一個(gè)README.txt文件項(xiàng)目說(shuō)明 4.分別基于master分支,創(chuàng)建local、dev、test分支, 分別代表不同的開(kāi)發(fā)或者測(cè)試環(huán)境,開(kāi)發(fā)/測(cè)試/發(fā)布只需要切換分支即可。分支對(duì)照表: master-生產(chǎn)分支 local-本地開(kāi)發(fā) dev-技術(shù)測(cè)試分支 test-回歸測(cè)試分支 5.將本地創(chuàng)建的local、dev、test分支推送至遠(yuǎn)程的版本庫(kù)二、場(chǎng)景實(shí)戰(zhàn)
模擬提交準(zhǔn)備
zhangsan提交3次,模擬做了3個(gè)功能點(diǎn),lisi提交2次模擬做了2個(gè)功能點(diǎn),wangwu提交2次模擬做了2個(gè)功能點(diǎn)
#lcoal 本地分支 #zhangsan 提交3次 git checkout local echo "1" >> a.txt git add a.txt git commit -m"zhangsan 第1次提交" echo "2" >> b.txt git add b.txt git commit -m"zhangsan 第2次提交" echo "3" >> c.txt git add c.txt git commit -m"zhangsan 第3次提交"#lisi 提交2次 git checkout local echo "1" >> 1.txt git add 1.txt git commit -m"lisi第1次提交" echo "2" >> 2.txt git add 2.txt git commit -m"lisi第2次提交"#wangwu 提交2次 git checkout local echo "1" >> h.txt git add h.txt git commit -m"wangwu 第1次提交" echo "2" >> j.txt git add j.txt git commit -m"wangwu 第2次提交"查看所有的提交記錄: git log --pretty=oneline --abbrev-commit3.1. Git合并某個(gè)分支的某一/多次提交到指定分支
- Git合并某個(gè)分支的某/多次提交到指定分支
3.2. Git合并分支
前提:基于dev技術(shù)測(cè)試環(huán)境已經(jīng)把zhangsan、lisi、wangwu的 功能測(cè)試沒(méi)問(wèn)題。大版本發(fā)布變更: zhangsan的3個(gè)功能點(diǎn)、lisi的2個(gè)功能點(diǎn)以及wangwu的2個(gè)功能 點(diǎn)都要發(fā)布回歸測(cè)試。明確要做的事情: zhangsan和lisi的5個(gè)功能點(diǎn)從local分支要發(fā)布到dev分支去申 請(qǐng)技術(shù)測(cè)試。應(yīng)該如何操作呢? 方案1((建議使用,這樣不會(huì)出錯(cuò)): 正常流程,在dev分支,將zhangsan的3次提交和lisi的2次提交, 合并到dev分支即可。需要合并5次提交,因?yàn)槊恳淮翁峤痪褪且粋€(gè) 功能點(diǎn),一條合并提交命令即可。 案例演示: #這里剛才已經(jīng)dev上有zhangsan、lisi的的5個(gè)功能點(diǎn)了,只要把 wangwu的2個(gè)功能點(diǎn),從local分支合并到dev即可 #將這2次提交(a52cf77 de17f44)合并到當(dāng)前分支(不限制哪個(gè)分支) git cherry-pick a52cf77 de17f44 #在dev分支上查看所有的提交記錄,等會(huì)我們會(huì)用到提交<commitId>進(jìn)行合并提交處理 git log --pretty=oneline --abbrev-commit #切換到test分支,把dev分支上zhangsan、lisi、wangwu的7次提交合并到test分支 git checkout test #將一下提交合并到當(dāng)前分支 git cherry-pick 6b0aa2f 8bbaf28 bf697f7 877d827 08d24a0 4297a8d efbaa86 方案2: 前提:以前dev分支和test代碼都是一樣的,只是在dev分支上新增的這7次提交記錄,在test分支是沒(méi)有的。 在這種場(chǎng)景下,直接合并分支即可,換言之,把dev分支合并到test分支 git checkout test #將dev分支合并到當(dāng)前的test分支 git merge dev3.3. 回滾/撤銷指定某一/多次提交(建議使用,雁過(guò)留聲、人過(guò)留名)
- 回滾/撤銷指定某一/多次提交(建議使用,雁過(guò)留聲、人過(guò)留名)
- 撤銷回滾已經(jīng)提交的文件
3.4. Git合并沖突
git默認(rèn)自動(dòng)幫我們合并的,但是也是有前提的。 假設(shè): 在dev分支上有一個(gè)README.TXT文件,內(nèi)容如下: 企業(yè)項(xiàng)目實(shí)戰(zhàn)Git團(tuán)隊(duì)操作 dev 分支 技術(shù)測(cè)試環(huán)境在test分支上有一個(gè)README.TXT文件,內(nèi)容如下: 企業(yè)項(xiàng)目實(shí)戰(zhàn)Git團(tuán)隊(duì)操作 test 分支 回歸測(cè)試分支如果這個(gè)文件的內(nèi)容,都不在同一行,git會(huì)自動(dòng)幫我們進(jìn)行合并沖突。但是假設(shè): dev分支上的README.TXT文件的“dev 分支 技術(shù)測(cè)試環(huán)境” 這句話在第2行; test分支上的README.TXT文件的“test 分支 回歸測(cè)試分支” 這句話README.TXT文件也在第2行。在test分支執(zhí)行g(shù)it merge dev,這樣就會(huì)出現(xiàn)版本沖突,如果 不顯示,你在執(zhí)行切換分支操作時(shí)就是提示你。 如下操作記錄日志: Administrator@PC-201911062145 MINGW64 ~/Desktop/kernel_system (test|MERGING) $ git checkout dev error: you need to resolve your current index first README.TXT: needs merge解決方案:
解決沖突即可: vim README.TXT 編輯前內(nèi)容如下: 企業(yè)項(xiàng)目實(shí)戰(zhàn)Git團(tuán)隊(duì)操作 master 分支 線上發(fā)布分支 <<<<<<< HEAD test 分支 回歸測(cè)試分支 ======= dev 分支 技術(shù)測(cè)試環(huán)境 >>>>>>> dev有3種解決方案 方案1: dev那句話和test那句話 都保存 方案2: 刪除dev那句話保存test那句話 方案3: 刪除test那句話保存dev那句話這個(gè)就要根據(jù)實(shí)際需求而言了,這里我選擇方案1(都保存)進(jìn)行演示: 解決沖突后文件的內(nèi)容如下: 企業(yè)項(xiàng)目實(shí)戰(zhàn)Git團(tuán)隊(duì)操作 master 分支 線上發(fā)布分支 test 分支 回歸測(cè)試分支 dev 分支 技術(shù)測(cè)試環(huán)境#將修改文件添加至?xí)捍鎱^(qū) git add README.TXT #將暫存區(qū)文件提交的本地Git倉(cāng)庫(kù) git commit -m"merge dev"3.5. Git刪除中間某一/多次提交記錄和提交的文件
- Git刪除中間某一/多次提交記錄和提交的文件
(明確風(fēng)險(xiǎn)后,執(zhí)行操作,這次作用于特殊情況下)
3.6. 撤銷回滾未未添加至?xí)捍鎱^(qū)文件
撤銷回滾未未添加至?xí)捍鎱^(qū)都使用git checkout
撤銷工作區(qū)已經(jīng)修改但是尚未添加至?xí)捍鎱^(qū)的文件恢復(fù)
git checkout .
如果,只想恢復(fù)a.js
git checkout a.js
這樣就可以恢復(fù)到修改前之前的a.js的狀態(tài)
3.7. 回退到以前的指定版本,之后提交的記錄和提交的文件全部刪除
回退到以前的指定版本,之后提交的記錄和提交的文件全部刪除
git reset --hard 指定回退的提交的<commitid> git push -f origin dev總結(jié)
以上是生活随笔為你收集整理的创新小组 实战Git团队企操作手册_精华版本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 前端传递json,后端应该怎样接收呢?
- 下一篇: (经验总结)flowable工作流_01