Git關於分支與合併

  • 302
  • 0
  • Git
  • 2019-02-23

Git

剛開始學分支與合併其實這概念滿容易搞混的,作筆記一下

git checkout A
git merge B

以上的指令會是變成合併後commit節點為A
若是跑下方的指令合併後會commit節點為B
 

git checkout B
git merge A

以下是分支圖的節點狀況

bug/123是從master切出來的分支,並在這個分支調整進行兩次commit,這段時間內master並沒有異動

如果要合併這兩隻分支,並須要在master分支下執行git merge bug/123
「因為新的檔案內容是在bug/123分支,必須執行git merge bug/123」

註記:如果bug/123分支下執行git merge master並不會得到合併的結果

合併可以把他想像成,從合併的分支中,複製新的檔案內容到目前的分支

這種merge型態稱呼為fast-forward merge

Fast-forward merge有一個特點是它部會產生新的commit節點。
我透過master分支快轉到bug123分支的Head,這樣狀況不會留下合併記錄

如果留下合併記錄的狀況下

git merge --no-ff 分支名稱


master和bug/123分支內容合併、就會產生新的commit節點,這方式叫做3-way-merge

在開發bug/123分支同時master分支也進行修改時候,就會呈現上圖狀況,因為Git會自動判斷
該使用fast-foward merge或是3-way merge,除非加上--no-ff,否則會得到上圖的狀況

在談分支
       上述可能還是可能不理解,我們來看分支的運作狀況
在git當中其實分支就像貼紙,它就是貼在某個commit上。
HEAD 是一個指標,指向某一個分支,通常你可以把 HEAD 當做「目前所在分支」看待

當進行commit提交一次之後如下,而HEAD就會跟者前進

若分支不夠,就多開一個吧


目前分支在dev上然後一個commit之後就會往前推進

如果是fun1 merge fun2 或 fun2 merge fun1 有什麼不同?

老E隨手寫