Git分支机制简介
?
Git分支只不過是一個指向某次提交的輕量級的可移動指針,當你發(fā)起提交時,就有了一個指向最后一次提交的名為master的分支。每次提交時,它都會自動向前移動。
Git默認的分支名稱為master,master分支其實并?一個特殊的分支,它與其他分支沒有什么區(qū)別。幾乎每個git倉庫都擁有該分支,這是因為git init初始化一個git倉的時候默認創(chuàng)建該分支,而大多數人沒有去重命名它。
?
git branch study創(chuàng)建名為study的分支
創(chuàng)建分支的時候,會創(chuàng)建一個指向當前提交的新指針,也就是testing。Git如何知道你當前處于哪一分支上?git通過一個名為HEAD的特殊指針實現的,在git中,HEAD是一個指向當前所在的本地分支的指針。
?
可通過git log --oneline –decorate查看各分支當前所指向的對象,用到--decorate
可看到master和study分支就顯示在f639e4e
2.切換分支
Git checkout study
切換到study后,HEAD由指向master指向了study,HEAD是指向當前分支的。
切換到study分支有什么意義呢?我們再提交一次
再次提交之后study分支已經向前移動,但master分支還是指向之前執(zhí)行git checkout study切換分支時所在的提交。
我們再切換master分支,它會把HEAD指針移回到master分支,還會把我們工作目錄的文件恢復到master分支指向的快照的狀態(tài),也就是第3次commit后的狀態(tài),比如我第4次commit是增加了#test4,重新恢復到沒有增加#test4的版本。
?
請注意,當你在切換分支時,工作目錄的文件會被改變。如果你切換到較舊的分支,工作目錄會被恢復到該分支最后一次提交的狀態(tài)。但如果在當前狀態(tài)下無法干凈地完成恢復操作,就允許你切換分支。比如我在master分支下修改了config文件,沒有commit,就不允許切換,要求我們先提交
?
Commit后,項目歷史已經產生了分叉,就是你創(chuàng)建了新分支study,在study分支上做了一次修改并提交。然后切回到主分支master做了修改并提交。這兩次提交是在master和study上做出的,彼此相互分離,你可以在分之間自由切換,當你準備好之后就可以合并這些修改。
?
git log --oneline --decorate --graph –all可以查看到分叉的歷史,下圖顯示出分支的指向以及項目歷史的分叉情況
?
Git分支實際上就是一個簡單的文件,其中只包含了該分支所指向提交的長度為10個字符的SHA-1校驗和(比如64fcb05b361cc7a8c76d05e441cf6e5125ff5866),見下圖的commit
。正因為這樣,git分支創(chuàng)建和刪除的成本很低,創(chuàng)建新分支就如同向文件寫入 41給字節(jié)(40個字符外加一個換行符)一樣的簡單快捷。
?
?
總結
- 上一篇: git远程仓库和分支
- 下一篇: 高通平台耳机插拔检测