git分支只不過是乙個指向某次提交的輕量級的可移動指標,當你發起提交時,就有了乙個指向最後一次提交的名為master的分支。每次提交時,它都會自動向前移動。
git預設的分支名稱為master,master分支其實並㐊乙個特殊的分支,它與其他分支沒有什麼區別。幾乎每個git倉庫都擁有該分支,這是因為git init初始化乙個git倉的時候預設建立該分支,而大多數人沒有去重新命名它。
建立新分支
git branch study建立名為study的分支
建立分支的時候,會建立乙個指向當前提交的新指標,也就是testing。git如何知道你當前處於哪一分支上?git通過乙個名為head的特殊指標實現的,在git中,head是乙個指向當前所在的本地分支的指標。
可通過git log --oneline –decorate檢視各分支當前所指向的物件,用到--decorate
可看到master和study分支就顯示在f639e4e
2.切換分支
切換到study後,head由指向master指向了study,head是指向當前分支的。
切換到study分支有什麼意義呢?我們再提交一次
再次提交之後study分支已經向前移動,但master分支還是指向之前執行git checkout study切換分支時所在的提交。
我們再切換master分支,它會把head指標移回到master分支,還會把我們工作目錄的檔案恢復到master分支指向的快照的狀態,也就是第3次commit後的狀態,比如我第4次commit是增加了#test4,重新恢復到沒有增加#test4的版本。
請注意,當你在切換分支時,工作目錄的檔案會被改變。如果你切換到較舊的分支,工作目錄會被恢復到該分支最後一次提交的狀態。但如果在當前狀態下無法乾淨地完成恢復操作,就允許你切換分支。比如我在master分支下修改了config檔案,沒有commit,就不允許切換,要求我們先提交
commit後,專案歷史已經產生了分叉,就是你建立了新分支study,在study分支上做了一次修改並提交。然後切回到主分支master做了修改並提交。這兩次提交是在master和study上做出的,彼此相互分離,你可以在分之間自由切換,當你準備好之後就可以合併這些修改。
git log --oneline --decorate --graph –all可以檢視到分叉的歷史,下圖顯示出分支的指向以及專案歷史的分叉情況
git分支實際上就是乙個簡單的檔案,其中只包含了該分支所指向提交的長度為10個字元的sha-1校驗和(比如64fcb05b361cc7a8c76d05e441cf6e5125ff5866),見下圖的commit
。正因為這樣,git分支建立和刪除的成本很低,建立新分支就如同向檔案寫入 41給位元組(40個字元外加乙個換行符)一樣的簡單快捷。
git 分支簡介
假設現在有乙個工作目錄,裡面包含了三個將要被暫存和提交的檔案。git add readme test.rb license git commit m the initial commit of my project 現在,git 倉庫中有五個物件 三個 blob 物件 儲存著檔案快照 乙個樹物件 記...
3 1 Git 分支 分支簡介
幾乎所有的版本控制系統都以某種形式支援分支。使用分支意味著你可以把你的工作從開發主線上分離開來,以免影響開發主線。在很多版本控制系統中,這是乙個略微低效的過程 常常需要完全建立乙個源 目錄的副本。對於大專案來說,這樣的過程會耗費很多時間。有人把 git 的分支模型稱為它的 必殺技特性 也正因為這一特...
第二章 Git分支機制
一 分支機制簡述 當你發起提交時,git儲存的是提交物件,其中包含了指向暫存區快照的指標。提交物件也包括作者姓名和郵箱位址,已輸入的提交資訊以及指向其父提交的指標。初始提交沒有父提交,而一般的提交會有乙個父提交 對於兩個或更多分支的合併提交來說,存在著多個父提交。git的分支只不過是乙個指向某次提交...