Git關於分支與合併

  • 327
  • 0
  • Git
  • 2025-03-03

Git

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

git checkout A
git merge B

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

白話一點是git merge(欲將哪個分支合併到當前分支),想把A併入到B,就先換到B 分支,然後Merge A指令
 

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 有什麼不同?
 

元哥的筆記