前言:基本操作 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