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