Git Part 3 : branch, merge, conflict merge - innowantai/Note GitHub Wiki
Part 3 : Git branch
Git merge
merge conflict

- 先前編輯皆在一條主分支master上進行,通常會將master當做最終的版本,開發中或測試新屬性的時後皆在另一個或其他分支上進行,達到開發過程互不干擾的結果
- 建立分支有兩種方法
git branch "branch_Name"
>> ex : git branch dev
(僅僅建立分支)
git checkout -b "branch_Name"
>> ex : git checkout -b dev
(建立分支並切換)
- 切換分支
git checkout "branch_Name"
>> ex : git checkout dev
- 刪除分支
git branch -d "branch_Name"
>> ex : git branch -d dev
(必須先離開此分支才可刪除)
- 將dev分支之結果push至master分支上
git merger --no-ff "keep merge info" dev
>> 使用指令前要先確保當前在master分支上(git checkout master
)
git merge
使用於開發過程中將分支上已開發完成之程式合併至master上發佈
- 流程大致如下 :
- 創造一新分支dev -
git branch dev
- 切換至dev分支 -
git checkout dev
- 撰寫完成程式碼後add並commit -
git commit -am "describe"
- 將dev分支之結果Push至master上 -
git merge --no-ff -m "describe-info" dev
- 查看分支結果
git log --oneline --grapth
結果如下
The logs without change in master branch
* 3124774 (HEAD -> master) add 2 in 2.py
* 9fb9a11 add 1 in 1.py
The logs with change in dev branch
* 86d351a (HEAD -> dev) Change in dev
* 3124774 (master) add 2 in 2.py
* 9fb9a11 add 1 in 1.py
The result after merge
* 2216bb2 (HEAD -> master) merge dev info
|\
| * 86d351a (dev) Change in dev
|/
* 3124774 add 2 in 2.py
* 9fb9a11 add 1 in 1.py
- CONFLICT : 如下所示,於dev上修改後並commit,然而master上也有其他人進行修改並commit,此時於master上進行merge會因為master上多一個"8b3a7c7" commit ID而產生衝突,需要人為解決

The logs with change in master branch
* 8b3a7c7 (HEAD -> master) Change in master
* 6dbe157 add 2 in 2.py
* aefe95e add 1 in 1.py
The logs with change in dev branch
* a4b57ae (HEAD -> dev) Change in dev
* 6dbe157 add 2 in 2.py
* aefe95e add 1 in 1.py
- 於master branch上進行
git merge dev
產生衝突會於檔案中標示衝突地方,人為修改後進行git commit -am "describe"
後即可
The result of merge after slove the conflict
* cebf68a (HEAD -> master) slove conflict
|\
| * a4b57ae (dev) Change in dev
* | 8b3a7c7 Change in master
|/
* 6dbe157 add 2 in 2.py
* aefe95e add 1 in 1.py
- After solved the conflict and commit it, the logs of the branch of master and dev show below
The logs with change in master branch after merge
cebf68a (HEAD -> master) slove conflict
a4b57ae (dev) Change in dev
8b3a7c7 Change in master
6dbe157 add 2 in 2.py
aefe95e add 1 in 1.py
The logs with change in dev branch after merge
a4b57ae (HEAD -> dev) Change in dev
6dbe157 add 2 in 2.py
aefe95e add 1 in 1.py
2018-06-29