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 有什麼不同?
元哥的筆記