Git分支創建與合並


分支管理是Git支持多人協作和版本控制的關鍵,參照廖雪峰對Git的介紹,對真實開發環境中Git的使用結合實踐進行梳理。

摘自:廖雪峰的官方網站

在實際開發中,我們應該按照幾個基本原則進行分支管理:

首先,master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發布時,再把dev分支合並到master上,在master分支發布1.0版本;

你和你的小伙伴們每個人都在dev分支上干活,每個人都有自己的分支,時不時地往dev分支上合並就可以了。

所以,團隊合作的分支看起來就像這樣:

在看具體實踐前,需要了解一些理論概念,參考創建與合並分支

  (1)HEAD指針與分支間的關系:

    

  (2)分支合並的時候,默認采用Fast Forward模式,可稱為“快進合並”,即將master直接指向dev的當前提交,如下圖,但這種模式下,刪除分支后,會丟掉分支信息:

    

    

  (3)no-ff模式,在合並的時候采用該模式,會新創建一個提交,並將master指向該最新提交。

     

 

1. 創建git工程

  (1)創建本地庫:執行命令 git init ,創建 .git隱藏文件

  (2)本地庫關聯遠程倉庫:用github對工程進行托管,具體可參照添加遠程庫,為本地庫添加遠程倉庫信息

  創建完成后,本地工程如下: 

2. 開發過程

  假設有2名開發,bob和lilei。

  (1)創建開發分支dev

    git checkout -b dev,此時該分支還屬於私人分支。

    git push origin dev:dev,遠程倉庫創建dev分支,並與本地關聯。

    git checkout dev   切換分支(切之前,可以先執行 git pull  拉去分支信息,使本地版本庫與遠程相同)。

              

  (2)對index.html文件進行修改,bob添加“add by bob”,提交到遠程倉庫,具體指令參照Git常用命令

  (3)lilei拉取最新代碼,並進行修改,在index.html中添加“add by lilei”

    ① git fetch origin dev    拉去dev分支最新代碼

    ② git merge --no-ff -m '合並最新代碼' dev      采用no-ff方式,將拉取的最新代碼與本地合並,注意:不加 -m后邊參數,會打開編輯器,輸入注解

    ③ 在index.html中添加“add by lilei”,提交並push到遠程倉庫

    

  (4)bob拉取最新代碼,並將dev分支合並到master分支

    ① git pull origin dev   直接pull,代替fetch+merge操作,默認采用Fast-Forward模式合並。(此處應該采用(3)先fetch,再merge,分支結構更明顯)

      

    ② git checkout master   切到主分支

    ③  git merge --no-ff -m 'merge with no-ff' dev 或者 git merge dev,會對dev和master進行合並提交

      

    ④ git push origin  將合並后的主分支同步到遠程倉庫

3. 分支結構

  (1)采用no-ff模式

  執行命令: git log --graph --pretty=oneline --abbrev-commit  查看分支圖形結構,如下:

  

  ① bob在dev的本地分支上修改文件,並提交到遠程倉庫。

  ② lilei本地拉取最新文件,並采用 no-ff方式進行合並(新創建一個提交,從而是dev分支的HEAD指針指向新提交)

  ③ lilei修改文件,並提交到遠程倉庫。bob直接pull拉取,默認采用Fast-Forward模式。

  ④ bob將dev合並到master分支,執行命令 git merge --no-ff -m 'merge with no-ff' dev

   在github上查看最后一次提交,其中本次提交有2個parent(4f368cc和5b53028),與上圖對應,如下:

  

  (2)采用Fast Forward模式

  

  ① 第一種模式最后一次提交。

  ② bob將修改提交遠程倉庫。lilei從遠程倉庫直接pull拉取合並,采用Fast Forward方式,沒有產生新的提交。

  ③ lilei將修改提交遠程倉庫。bob拉取遠程倉庫后合並(fetch+merge),采用Fast Forward模式,沒產生新的提交。

  ④ 切換到master分支,執行 git merge dev  合並。

 4. 合並沖突解決

  遇到沖突時,Git已經做了合並,但是沒有自動地創建一個新的合並提交。 Git會暫停下來,等待你去解決合並產生的沖突,然后再對沖突的文件執行提交(add、commit、push)即可,但分支樹上會記錄沖突。

  具體做法參考:Git 分支 - 分支的新建與合並

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM