E哥的Git教程(五)公司程式碼提交流程
公司程式碼提交流程
“這回我心裡有底了,只要掌握了git的這些命令,工作的效率很快能趕上來!”
看著李靖信心滿滿,躍躍欲試的樣子,E哥微笑道:“先別高興得太早,我們現在來個複雜的,也是最重要的實戰演練把。 這次你要完全按照公司的開發流程來模擬一遍。”
公司Git提交流程
E哥說完用黑板擦把白板擦乾淨,在上面開始畫起來。
”我們的開發流程是這樣的。”
”所有新加入專案的同事都從遠端倉庫clone一份程式碼到本地。 每個人把的任務做完後push到遠端倉庫。遠端倉庫的程式碼合併和維護一致性,一般由我來完成,這樣每個人只要專注於自己本地倉庫的版本控制就可以了。“
”實際的專案我們新開發的功能都會起一個新的分支, master分支只用來儲存已經驗證測試通過的分支。 例如,我們雷神的專案現在正進行2.0的開發, 我已經在遠端倉庫建立了一個分支release-2.0。大家都在本地獲取一份release-2.0,在上面進行開發和push程式碼。“
”當我們開發完成,測試沒有問題後。我會把release-2.0 合併到master,然後我們的運維兄弟就可以部署到生產環境了。這樣能保證測試完的程式碼,在生成環境也是同一份完整的。”
“還是用我們剛才的那個演示用倉庫, 現在你先用git branch –a
來檢視本地倉庫中有哪些分支:”
$ git branch -a
feature1
hotfix
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/release-2.0
我們雷神的專案現在正進行2.0的開發,所以我們在遠端倉庫裡新建了一個release-2.0的分支。
第一步,我們從遠端抓取release-2.0分支上最新的程式碼,以防最近有其他同事修改了程式碼:
$ git fetch origin release-2.0:release-2.0
From github.com:liyi-demo/grit
* [new branch] release-2.0 -> release-2.0
“這裡的 release-2.0:release-2.0
是按照 遠端分支名:本地分支名 來表示的。 這裡表示把遠端分支release-2.0 抓取到本地,為了專案統一本地分支的名字我們也叫release-2.0。”
“之前我們用的fetch命令是 git fetch origin
“其實是一樣的,我們之前執行的命令其實應該是git fetch origin master:master
, 系統預設可以省略掉後面的master:master了。”
“現在,你就可以開始在release-2.0分支進行實際的開發動作了, 例如你現在的任務是在release2.0這個版本里修復issue55這bug,那麼我們執行命令:”
$ git checkout release-2.0
error: Your local changes to the following files would be overwritten by checkout:
README
Please, commit your changes or stash them before you can switch branches.
Aborting
“咦,好像checkout失敗了!“李靖指著螢幕上的error資訊說道。
“這是因為我們之前有操作修改了README,並沒有提交改動。 Git強制要求把所有改動都提交才能checkout到其他分支。”
”哦,是的,我記得之前E哥還提醒過我。“李靖恍然大悟道。
我們先用剛才學的git checkout -- file
來強行恢復到上一個版本。
$ git checkout -- README
$ git checkout release-2.0
$ git branch iss55
$ git checkout iss55
“從release-2.0這個分支開始,建立issue55分成一個新分支進行修改。”
$ vi README
輸入文字,儲存退出。
$ git add README
$ git commit -m "commit on iss55 "
“我們現在要在本地把issue55的修改合併到release2.0上了。 在合併之前,要確認一下遠端的release-2.0是否有新的變化,因為是多人協作,這期間可能有其他同事往遠端的release2.0提交了程式碼,為了避免不必要的麻煩,使用git pull命令獲取最新的遠端release2.0以此保證最新的本地release2.0程式碼在合併時是最新的。”
$ git checkout release-2.0
$ git pull origin release-2.0
From github.com:liyi-demo/grit
* branch release-2.0 -> FETCH_HEAD
Already up-to-date.
從遠處的release-2.0 推送最新的程式碼到FETCH_HEAD分支,即當前分支是release2.0。 等同於 git pull origin release-2.0:release-2.0
。
“Ok,開始合併。”
$ git merge iss55
Updating 58a2eb1..be7aafb
Fast-forward
README | 2 ++
1 file changed, 2 insertions(+)
這時的狀態是這樣:
小貼士:
在公司,一般會要求提交codereview請求, 需要同事都確認code review沒有問題。
執行遠端推送:
$ git push origin release-2.0
Warning: Permanently added the RSA host key for IP address '192.30.252.128' to the list of known hosts.
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 282 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To [email protected]:liyi-demo/grit.git
58a2eb1..be7aafb release-2.0 -> release-2.0
小貼士:
如果你的電腦是第一次提交遠端合併,會提示:
Warning: Permanently added the RSA host key for IP address '192.30.252.128' to the list of known hosts.
工作指令集
李靖:“這下我心裡有底了,我下午就開始按流程開始使用git提交程式碼!”
“good,恭喜你!“E哥很開心的和還處於興奮中的李靖擊了一下掌。
“你已經完全可以使用git了, 我11點還有個會,我們今天就先到這裡。 你自己在熟悉一下剛才的命令,遇到有什麼問題,可以直接來問我。 建議你把剛才的命令記下來貼在電腦的記事本里,專案需要時安裝命令逐一執行,這樣出錯的機率就小很多!”
“好的,多謝E哥!”
看著E個匆匆離去的背影, 李靖心想還好有人在旁邊指導, 不然自己得花不知道多少時間去研究才能把這些命令搞透。 李靖熟悉了一下剛才的命令,在記事本里敲上了工作命令流程:
git fetch origin release-2.0:release-2.0
//從伺服器端,取下最新的分支到本地;git checkout release-2.0
//切換到本地release2.0目錄git branch iss55
//從本地的release-2.0分支拉出子分支,做需求修改;git checkout iss55
//從本地的release-2.0分支切換到其子分支iss55上;- //修改,編輯,除錯程式碼,直到功能實現;
git status
//檢視變動的程式碼;git add file1 file2 file3
//新增變動的修改;git commit
//提交變動,並補充描述,git log -n 5
//檢視提交的日誌;git checkout release-2.0
//切換到本的主分支;git pull release-2.0
// 在把子分支的修改合併到主分支前(本地),需要先從線上將最新的分支拉下來(線上),【多人協同工作時,他人可能提交了修改】git merge iss55
// 把子分支iss55的修改合併到主分支release-2.0(本地)git push origin release-2.0
//把本地分支提交到伺服器(線上)對應分支上
相關推薦
E哥的Git教程(五)公司程式碼提交流程
公司程式碼提交流程 “這回我心裡有底了,只要掌握了git的這些命令,工作的效率很快能趕上來!” 看著李靖信心滿滿,躍躍欲試的樣子,E哥微笑道:“先別高興得太早,我們現在來個複雜的,也是最重要的實戰演練把。 這次你要完全按照公司的開發流程來模擬一遍。”
Python入門系列教程(五)函數
st3 python入門 test print 缺省 .com 教程 技術 log 全局變量 修改全局變量 a=100 def test(): global a a=200 print a 多個返回值 缺省參數 d
java教程(五)SSH框架-配置
jar 集成 相同 onf -i ret 順序 cati lin 前言:從這篇博客開始我將繼續講述Java教程:SSH篇。主要內容環繞SSH框架分析與搭建,今天先簡介一下SSH的配置。 SSH配置順序是: spring-->hibern
微信公眾平臺開發教程(五)自定義菜單
打開鏈接 delete toolbar 推送 優化 pcl reader 接口查詢 robot 應大家強烈要求,將自定義菜單功能課程提前。 一、概述: 如果只有輸入框,可能太簡單,感覺像命令行。自定義菜單,給我們提供了很大的靈活性,更符合用戶的操作習慣。在一個小小的微信對話
Git 教程(二):時光穿梭
rac call 替換 img posit key 誤刪 ranch 定位在 我們已經成功地添加並提交了一個readme.txt文件,現在,是時候繼續工作了,於是,我們繼續修改readme.txt文件,改成如下內容: Git is a distributed version
Git 教程(三):倉庫與分支
ide 不但 clas version span 右上角 director discard pre 遠程倉庫 到目前為止,我們已經掌握了如何在Git倉庫裏對一個文件進行時光穿梭,你再也不用擔心文件備份或者丟失的問題了。 可是有用過集中式版本控制系統SVN的童鞋會站出來說,這
python基礎教程(五)
() 文件名 nal cnblogs 文件 求長 元素 fin 查詢 字符串基本操作 所有標準的序列操作(索引、分片、乘法、判斷成員資格、求長度、取最小值和最大值)對字符串同樣適用,前面已經講述的這些操作。但是,請註意字符串都是不可變的。 字符串的方法: 字符串從s
JXLS 2.4.0系列教程(五)——更進一步的應用和bug修復
erl dir 問題 create sna 過程 idl es2017 cal 註:本文代碼建立於前面寫的代碼。不過不看也不要緊。 前面的文章把JXLS 2.4.0 的基本使用寫了一遍,現在講講一些更進一步的使用方法。我只寫一些我用到過的方法,更多的高級使用方法請參
Spring Boot參考教程(五)Spring Boot配置使用之配置類用法
expr web程序 成功 驗證 pan hub parameter lan fix 4.2. SpringBoot配置使用之配置類使用 Spring Boot的大部分自動配置都可以滿足應用要求,但如果想精確的控制應用,或者想覆蓋自動配置,使用配置類是另一種很好的選擇,強調
Linux系列教程(五)——Linux鏈接命令和權限管理命令
密碼 mission pos link 掩碼 Owner 最大的 linux系統 passwd 前一篇博客我們講解了Linux文件和目錄處理命令,還是老生常淡,對於新手而言,我們不需要完全記住命令的詳細語法,記住該命令能完成什麽功能,然後需要的時候去查就好了,用的多了我
Spring Cloud Config教程(五)客戶端使用
home 本地 snap 遠程 html local nap parent path 要在應用程序中使用這些功能,只需將其構建為依賴於spring-cloud-config-client的Spring引導應用程序(例如,查看配置客戶端或示例應用程序的測試用例)。添加依賴關
Java NIO教程(五) 通道之間的資料傳輸
Java NIO教程(五) 通道之間的資料傳輸
Spring.NET教程(五)容器中物件的作用域(基礎篇)
容器中物件的部署分為兩種方式:singleton和非singleton(Java裡叫prototype)。這裡的singleton指的是“單例模式”,就是說當一個物件被定義為singleton時,容器中就只會有一個共享的例項,任何時候通過id或別名請求該物件都會返回這個共享例項的引用(也就是說這個物件只會被建
Docker入門教程(五)Docker安全
【編者的話】DockOne組織翻譯了Flux7的Docker入門教程,本文是系列入門教程的第五篇,介紹了Docker的安全問題,依然是老話重談,入門者可以通過閱讀本文快速瞭解。 我們必須高度重視開源軟體的安全問題,當開發者在使用Docker時,從本地構建應用程式到生產環境部署是沒有任何差異的(譯
ADO.NET入門教程(五) 細說資料庫連線池
題外話 通過前幾章的學習,不知道大家對ADO.NET有一定的瞭解了沒有。撇開文章質量不講,必須肯定的是,我是用心去寫每一篇文章的。無論是是在排版上,還是在內容選取上我都花了不少心思。我希望通過本系列文章,無論是新手還是老手,在ADO.NET上都能有所收穫。如果大家覺得有幫助,我希望能得到您的推薦和關注,讓我
檢視修改的歷史記錄 git log 命令 和 返回上一次修改版本 git reset 、git reflog(五)
上一篇,已經學會了修改檔案,然後再把修改檔案提交到Git版本庫,now,再重複執行一次,修改index.html檔案如下: 然後執行新增、提交: 像這樣,你不斷對檔案進行修改,然後不斷提交修改到版本庫裡,每次修改到一定程度時,再提交;一旦你把檔案改亂了,或者誤刪了檔案,還可以從最
企業級 SpringBoot 教程 (五)springboot整合 beatlsql
BeetSql是一個全功能DAO工具, 同時具有Hibernate 優點 & Mybatis優點功能,適用於承認以SQL為中心,同時又需求工具能自動能生成大量常用的SQL的應用。 beatlsql 優點 開發效率 無需註解,自動使用大量內建SQL,輕易完成增
Java大資料培訓視訊全套教程-Git教程(34)-馬克-專題視訊課程
Java大資料培訓視訊全套教程-Git教程(34)—6人已學習 課程介紹 Java大資料系列視訊課程:"java大資料培訓學校全套教材"系列課程由750集視訊構成,基本就 是1)時下流行
python3教程(五):number
之前我們建立了字串,並可以操作字串做出各種東西,比如相加相乘。 在python中數字也可以加減乘除,且運算規則也是我們正常認知中的運算,即十進位制。 #在python中加減乘分別用+-*來代替# >>> 6+5 11 >>> 10-9 1 >&g
企業級 SpringCloud 教程 (五)路由閘道器(zuul)
在微服務架構中,需要幾個基礎的服務治理元件,包括服務註冊與發現、服務消費、負載均衡、斷路器、智慧路由、配置管理等,由這幾個基礎元件相互協作,共同組建了一個簡單的微服務系統。一個簡答的微服務系統如下圖: 注意:A服務和B服務是可以相互呼叫的,作圖的時候忘記了。並且配置服務也是註冊到服務註冊中心的。