git實戰5 – 本地分支branch與合併merge


當在同一台機器,但儲存庫中有有 3 個版本時
主版本 master,分支 addfun,分支 fixbug
如果切換到 addfun 修改 1.txt 時

echo 1 > 1.txt

不要 commit,然後切換到 fixbug

git checkout fixbug
M       1.txt
Switched to branch 'fixbug'

會發現在 fixbug 的 1.txt 也會被修改

cat 1.txt
1

先 commit 所有修改

回到 master 然後合併 fixbug

git merge fixbug
Updating 99c0583..65376b6
Fast-forward
1.txt |    2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

所謂的 Fast-forward 指的是快進,只是指標向右移
如果順著一個分支走下去可以到達另一個分支的話,那麼 Git 在合併兩者時,只會簡單地把指標右移,因為這種單線的歷史分支不存在任何需要解決的分歧,所以這種合併過程可以稱為快進(Fast forward)

由於 master 合併了 fixbug 這個分支 ( 快進 ),所以可以刪除 fixbug 分支了

git branch -d fixbug
Deleted branch fixbug (was 65376b6).

再查看一次

git branch
  addfun
* master

如果是單純的單一線的分支合併屬於快進,這是容易理解也不易出錯的方式,但如果是較複雜的多分支合併
Git 會用兩個分支的末端(C4 和 C5)以及它們的共同祖先(C2)進行一次簡單的三方合併計算
參考:3.2 Git 分支 – 分支的新建與合併

如果遇到衝突時,git 會合併,但不會 commit ,需要你手動處理衝突並手動 commit 產生一個新的快照指標
衝突的產生是因為 2 個人同時修改了同一份檔案,若沒有修改同一份檔案,不會產生衝突。

刪除遠端分支:

git push origin --delete <branch name>