Git命令之分支詳解

1.1 概述

Git 中提交時,會保存一個 commit 對象,該對象包含一個指向暫存內容快照的指針,包含本次提交的作者等相關的附屬信息,包含零個或者多個指向該提交對象的父對象指針;首次提交時沒有直接祖先的,普通提交有一個祖先,由兩個或者多個分支合並產生的提交則有多個祖先。

1.1.1 示例

在工作目錄中有三個文件,準備將他們暫存後提交。暫存操作會對每一個文件計算校驗和(SHA-1哈希串),然後把當前版本的文件快照保存在 Git 倉庫中(Git使用blob類型的對象存儲這些快照), 並將校驗和加入暫存區域。 當使用 git commit 新建一個提交對象前,Git 會先計算每一個子目錄的校驗和嗎,然後在 Git 倉庫中將這些目錄保存為樹(對象);之後 Git 創建的提交對象,除瞭包含提交信息外,還包含瞭指向整個樹對象的指針。這樣將來需要的時候,重現此次快照的內容瞭。

$ git add text1.md text2.md tesxt3.md
$ git commit -m "init desc"

現在倉庫中有瞭五個對象:三個文件表示快照內容 blob 對象;一個記錄這目錄樹內容和其中各個文件對應 blob 對象索引的 tree 對象;還有就是一個包含指向 tree 對象的索引和其他提交信息源數據的 commit 對象。

修改後再次提交,這次提交的對象會包含上一個指向上次提交對象的指針。兩次提交後變成下面這樣。

Git 中的分支,其實本質上僅僅是個指向 commit 對象的可變指針。Git 會將 master 作為分支的默認名字。若幹次提交以後,其實已經有一個指向最後一次提交對象的 master 分支,他在每次提交的時候都會向前移動。

1.1.2 創建分支

使用命令 git branch 創建分支

$ git branch testing

Git 保存著一個名為 HEAD 的特別的指針。在 Git 中他是一個指向你正在工作中的本地分支的指針。運行 git branch 命令,僅僅是建立瞭一個新的分支,但是不會自動切換到這個新建的分支中。

1.1.3 切換分支

使用命令 git checkout 切換分支:

$ git checkout testing

1.2 新建和合並

使用命令創建並切換分支

$ git checkout -b <分支名稱>

合並分支,將開發分支合並到 master 主分支中

$ git checkout master
$ git merge <開發分支>

刪除分支

$ git branch -d <分支名稱>

解決沖突, ======= 隔開的上半部分,是 HEAD(即 master 分支,在運行 merge 命令時所切換到的分支)中的內容。下半部分是在開發分支的內容。

<<<<<<< HEAD:index.html
<div id="footer">contact : [email protected]</div>
=======
<div id="footer">
please contact us at [email protected]
</div>
>>>>>>> iss53:index.html

1.3 管理分支

列出所有的分支

$ git branch

列出各個分支最後一個提交對象的信息

$ git branch -v

1.4 遠程分支

遠程分支是對遠程倉庫中分支的索引。通過 git fetch origin 來同步遠程服務器上的數據到本地。

推送本地的開發分支到遠程

$ git push origin <開發分支名>

刪除遠程分支

$ git push origin :<開發分支名>

1.5 分支的擴展

git rebase ing

到此這篇關於Git命令之分支詳解的文章就介紹到這瞭,更多相關Git命令內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: