測試多分支開發對合並代碼的影響

在多人開發的項目中,通常會有 master、dev、test 分支,每一個分支的做用也是不同的。master 是用於線上環境,個別負責人才有合併權限的;dev 用於開發環境;test 用於測試環境。通常的合併流程是dev→test→master。可是,若是多我的同時在一個分支如 test 分支上寫代碼,有的代碼要上線,有的之後才上,這樣就會致使不上線的代碼也會被合併到 master 上php

因此,開發新功能的時候通常會在最新的master 分支切出一個分支來開發。git

遇到的問題

最近在一個項目新增功能,因而在 master 切了一個分支進行開發,分支就叫add_feature吧。在把代碼合併到 master 分支的時候,遇到一個問題,顯示「在這個合併請求的源分支中,當前沒有任何更改」(Currently there are no changes in this merge request's source branch.)我就很奇怪,明明沒有提交合並請求過,master 怎麼會有個人代碼呢?而後我在 master 分支上git log,發現有個人提交記錄,覺得 master 分支上已經有個人代碼了。因而把合併請求關閉了。api

結果 master上線以後,我調了一下個人代碼涉及到的 api 接口,竟然404了。在 add_feature上寫好代碼後,我會把代碼合併到 test,而後部署到測試環境進行測試。我猜想有人在 直接在test 分支上開發,須要上線代碼,發現 test 分支摻雜着個人代碼,因而把個人代碼刪除,而後合併到 maseter,結果 master 裏有個人 commit,致使我沒法將 add_feature 合併到 master 分支。函數

重現步驟

爲簡化步驟,只建立 master、test、add_feature 分支。測試

  1. 新建一個倉庫,初始化 master 分支代碼,代碼以下:
  2. 在 master 分支切出新分支 add_feature,而後添加新代碼——函數 test1(),截圖中有詳細步驟:

3. 而後在 master 分支切出新分支 test,供你們測試使用。再將 add_feature 合併到 test,部署新添加的功能:

4. 某位同事A在 test 分支上新增 test2()功能,提交代碼:

5. 同事 A 要上線 test2(),可是暫時不上線 test1(),因而他把 test1()代碼刪除了:

6. 負責人執行合併 test 分支請求,結果以下:

git log 發現也是有 add_feature的提交記錄:

7. 此時也須要將 test1()的功能上線,因而決定將 add_feature合併到 master 分支:

結果有點詫異,代碼已是最新的。 使用 git diff add_feature查看,兩個分支是有差別的:

8. 問題得以重現。

結論

多人合做不要直接在 test 分支上開發,若是已經開發了,也不要把別人的代碼刪掉,註釋掉就行了。this

存疑

本人仍是新手,不瞭解這內部的原理是什麼。也有可能個人這些步驟出問題了,若是有不對的地方,但願大佬們可以指出。謝謝你們。3d

寫此文僅以記錄開發中遇到的問題。code

原文連接cdn

相關文章
相關標籤/搜索