實際開發(fā)項目使用到的分支:
main:生產環(huán)境,也就是你們在網上可以下載到的版本,是經過了很多輪測試得到的穩(wěn)定版本。
release: 開發(fā)內部發(fā)版,也就是測試環(huán)境。
dev:所有的feature都要從dev上checkout。
feature:每個需求新創(chuàng)建的分支。
下面介紹一下一個新需求過來的git操作流程:
1.從dev分支上checkout -b new-feature,進行開發(fā)
2.開發(fā)完后,經過自測沒問題了,準備發(fā)版
3.merge到release分支上進行發(fā)版,并打tag
4.有bug就直接在release上進行修改,改完再次發(fā)版,打tag,直到測試人員驗證完畢
5.這時可以將release分支合并到dev上,也可以刪除掉feature分支了,并等待通知是否將此功能上線(發(fā)布正式版本,也就是在正式服務器上運行),如果上線,那就merge到main(master)分支,當然了有可能需要將ip改為生產服務器的地址,并打上一個official tag。
6.如果上線后,發(fā)現(xiàn)有bug,如果此時main分支已經又合并上新功能B了,但是這個臨時的版本又不想包含B的功能,那么可以切換到上次的official tag,checkout -b一個hotfix分支進行bug修復,hotfix分支要進行保留,不能刪除。測試沒問題就可以發(fā)版了,最后可以合并到main上。
一般的項目這套流程應該就足夠了。所有的發(fā)版tag都會集中到release,main,hotfix分支上,所有的需求都會從dev上拉取,這樣能保證代碼是完整可用的,是經過每次release合并過來的
指令及其含義
- git checkout -b xxx:git checkout xxx是指切換到xxx(用local區(qū)的xxx替換disk區(qū)文件),-b意味著branch,即創(chuàng)建新分支,這條指令合起來意思是創(chuàng)建并切換到xxx。
- git diff:查看暫存區(qū)與disk區(qū)文件的差異。
- git add xxx:將xxx文件添加到暫存區(qū)。
- git commit:將暫存區(qū)內容添加到local區(qū)的當前分支中。
- git push :將local區(qū)的LocalBranchName分支推送到RemoteHostName主機的同名分支。(若加-f表示無視本地與遠程分支的差異強行push)
- git pull :同上,不過改成從遠程主機下載遠程分支并與本地同名分支合并。
- git rebase xxx:假設當前分支與xxx分支存在共同部分common,該指令用xxx分支包括common在內的整體替換當前分支的common部分(原先xxx分支內容為common->diversityA,當前分支內容為common->diversityB,執(zhí)行完該指令后當前分支內容為common->diversityA->diversityB)。
- git branch -D xxx:不加-D表示創(chuàng)建新local分支xxx,加-D表示強制刪除local分支xxx。
工作流一:
- git clone remote// 到本地
- git checkout -b feature 切換至新分支feature ,沒有就創(chuàng)建
- 修改或者添加本地代碼(部署在硬盤的源文件上)
- git diff 查看自己對代碼做出的改變
- git add 上傳更新后的代碼至暫存區(qū)
- git commit 可以將暫存區(qū)里更新后的代碼更新到本地git
- git push origin feature將本地的feature分支上傳至github上的git
如果在寫自己的代碼過程中發(fā)現(xiàn)遠端GitHub上master分支代碼出現(xiàn)改變
- git checkout master切換回master分支
- git pull origin master將遠端修改過的代碼再更新到本地
- git checkout feature回到feature分支
- git rebase master把我的修改先都放在一邊,然后把master最新的修改拿過來,接著在這個最新修改的基礎之上,再把我的commit嘗試弄回去,中途可能會出現(xiàn)rebase conflict手動選擇保留哪段代碼,就相當于我們在最新的master分支上做了修改 ,這也是使用rebase而不是使用merge的好處
- git push -f origin feature把rebase后并且更新過的代碼再push到遠端github上,由于做了rebase所以需要加上-f ,-f表示強行,強行push
- 把更新的代碼合并到遠程master分支里面,pull request的意思是request項目的主人把我這個新的分支的改變給pull到這個項目里去。原項目主人采用pull request 中的 squash and merge 合并所有不同的commit
遠端完成更新后
- github刪除個人遠程分支feature
- 本地切換到主分支git checkout master && git branch -d feature刪除本地的git分支
- git pull origin master 再把遠端的最新代碼拉至本地,這時我們的本地倉庫就又和遠程一樣了。
工作流二:
遠程倉庫有兩個master和test分支
- git clone remote克隆倉庫
- git checkout -b feature切換分支,沒有就會新創(chuàng)建并切換
- 編寫代碼并提交本地倉庫
- 推送到遠程test分支
- git checkout -b test origin/test意思是切換一個分支,如果分支不存在就會創(chuàng)建并切換到test分支,后面origin/test是指從遠程test克隆下來,并與本地test分支建立聯(lián)系,這時,文件里沒有新編寫的代碼。
- 切換到feature分支使用git log查看提交歷史記錄,記錄以前提交的哈希值
- 切換到test分支,使用git cherry-pick 哈希值,這時代碼就同步過來了,可以再次使用git log查看。
- git push到遠程test分支
- 同步到遠程master分支,如果此時遠程master分支有更新,需要切換到master分支使用git pull保證本地master分支是最新的,然后使用git cherry-pick 哈希值,這時代碼就同步過來了,可以再次使用git log查看,再push到遠程分支。
工作流三: git pull(本地push之前先執(zhí)行pull,拉取最新代碼,解決沖突防止覆蓋他人最新提交的代碼)
- 本地修改代碼,遠程也更新代碼,產生沖突
- 使用git pull后需要手動merge
- git add .
- git commit -m “合并沖突”
- git push
- git log --graph
缺點:提交記錄出現(xiàn)分叉,出現(xiàn)很多奇怪的提交記錄。
工作流四: git pull --rebase優(yōu)化提交記錄
現(xiàn)象:提交記錄出現(xiàn)分叉,出現(xiàn)很多奇怪的提交記錄。
業(yè)務場景:
在本地分支完成了我功能的開發(fā),現(xiàn)在需要合并到test 分支上,于是我的目標是在test 分支上執(zhí)行git cherry-pick操作將我的代碼檢出到test上,因為我要避免有人更新過test分支,所以我在此之前先執(zhí)行了一下git pull ,出現(xiàn)了一個Merge的vi窗口(過去我一直沒注意, 直接就wq出去
.了),其實這個就是導火索! vi窗口如下:
原因
git pull 其實是一個組合操作,其會執(zhí)行git fetch + git merge (過去其實完全不知道) , 因為
有git merge的存在,所以最后的提交記錄看起來就會很亂。
解決方案
使用git pull --rebase 來進行合并本地和遠程分支。既可以完美解決這個問題!
git pull --rebase 也是一個組合操作, 其會執(zhí)行git fetch + git rebase ,我們知道git rebase 就
是解決凌亂記錄的一個大殺器,所以可以完美的解決!文章來源:http://www.zghlxwxcb.cn/news/detail-690893.html
- 本地修改代碼,遠程也更新代碼,產生沖突
- 使用git pull --rebase origin test需要手動處理沖突
current change變?yōu)榱诉h程,意味著更新版本是以遠程為基礎的大的提交,不會是含有本地每次小的提交。 - git add .
- git rebase --continue
- wq即可
- git push
- git log --graph
這樣操作之后我們的提交記錄就是非常干凈的一條鏈路了!
補充:
git log --graph
更加清晰的結構查看log記錄。文章來源地址http://www.zghlxwxcb.cn/news/detail-690893.html
到了這里,關于Git工作流的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!