[Git] Git 自學筆記 : 進階操作(分支)

  • 597
  • 0
  • Git
  • 2016-09-12

前言:基本操作 https://dotblogs.com.tw/michaelfang/2016/08/20/git-notes

當多人一同修改git上的版本時
便會使用到git branch(分支) 的功能


 

主要指令: git checkout -b
               git branch
               git fetch
               git merge 
               git rebase   


簡易分支情境

原本程式由mike一個人維護(master)
後續加入一位生力軍開發成員(max)一同修改
此時max 加入協同開發的流程如下

MAX's git command
1.複製一個遠端的儲存庫 
git clone <url> <repository name>
e.g git clone z:\myrepo\myproject.git myproject

2.1建立儲存庫的分支,並切換到該分支
git checkout -b <branch name>   
e.g git checkout -b feature

2.2 查看目前分支
e.g git branch
* feature
  master   

2.3切換分支
e.g git checkout feature

3.開始修改,同之前的操作
e.g git add .

4.git commit -m  "feature-a commit"



Mike's command
1.先同步分支紀錄(update branch)
git fetch myproject 

2.切換分支
git checkout -b feature myproject/feature


3..觀察 branch 之間的差異
     git diff feature master

4.整理現在分支:將feature分支 修改的每一個commit紀錄接到master 後面
   目前分支為feature ,整理到master後面
     git rebase master   (當時在分支feature)
     建議情境:該branch 修改比較多 直接將branch 的 異動 接在master後方
 
4.1 也可用git merge feature  (當時分支在master)
      將分支異動直接與目前mater 合併 (異動紀錄會只有一個點)
       

5.merge and rebase  差別
     合併前    
     D---E feature
    /
A---B---C---F master   

5.1 merge
合併後 產生新的G點(merge點) , G點若有檔案衝突需解決
       D--------E  
      /             \
A---B---C---F----G   feature, master
優點:merge點只有一個,預期衝突點多,建議使用merge
缺點:紀錄少

5.2 rebase
使用整理後合併的方式, D'  or E' 若有衝突 必須各自解決衝突  
故此種方式,異動紀錄會很乾淨,也都有保留,但衝突點可能會多
若預計衝突點不多的可以使用此方式log比較清楚
優點:紀錄完整
缺點:衝突點可能多 (衝突點少的再用)           
A---B---C---F---D'---E'   feature, master