git學習系列(二)---- git的分支

最近在學習git,對git也有了新的認識,寫一些總結,文章基本總結於 Pro Gitcss

其餘git相關文章:git

git學習系列(一)---- git的基礎知識vim

本章主要介紹git的分支segmentfault

分支簡介

首先,git 保存的不是文件的變化或者差別,而是一系列不一樣時刻的文件快照。
在進行提交操做(commit)時,git會保存一個提交對象(commit object)。
提交對象主要包括如下內容:服務器

1.指向暫存內容快照的指針
2.做者的姓名和郵箱
3.提交時輸入的信息
4.指向它的父對象的指針(初次提交無)

clipboard.png

git 的分支,其實本質上僅僅是指向提交對象的可變指針。學習

注: git的默認分支名字是 master。git 的 「master」 分支並非一個特殊分支。 它就跟其它分支徹底沒有區別。
之因此幾乎每個倉庫都有 master 分支,是由於 git init 命令默認建立它,而且大多數人都懶得去改動它。

分支建立

git branch testing

這會在當前所在的提交對象上建立一個指針。那麼,Git 又是怎麼知道當前在哪個分支上呢?它有一個名爲 HEAD 的特殊指針,指向當前所在的本地分支fetch

clipboard.png

分支切換

git checkout testing

這樣 HEAD 就指向 testing 分支了。spa

clipboard.png

這時候咱們再進行一次提交,會發現 你的 testing 分支向前移動了,可是 master 分支卻沒有3d

clipboard.png

這個時候咱們再切回master分支, 並進行一些修改與提交指針

git checkout master
vim test.rb
git commit -a -m 'made other changes'

這個項目的提交歷史已經產生了分叉,你能夠在不一樣分支間不斷地來回切換和工做,並在時機成熟時將它們合併起來
clipboard.png

你能夠簡單地使用 git log 命令查看分叉歷史

git log --oneline --decorate --graph --all

clipboard.png

跟蹤分支

從一個遠程跟蹤分支檢出一個本地分支會自動建立一個叫作 「跟蹤分支」,跟蹤分支是與遠程分支有直接關係的本地分支。 若是在一個跟蹤分支上輸入 git pull,git 能自動地識別去哪一個服務器上抓取、合併到哪一個分支。

設置已有的本地分支跟蹤一個剛剛拉取下來的遠程分支,或者想要修改正在跟蹤的上游分支,你能夠在任意時間使用 -u 或 --set-upstream-to 選項運行 git branch 來顯式地設置。

git branch -u origin/serverfix
或者
git branch --set-upstream-to=origin/[branch]  [branch]

設置追蹤分支後可直接使用git pull 不用再指定遠程分支
若是想要查看設置的全部跟蹤分支,可使用 git branch 的 -vv 選項

git branch -vv

clipboard.png

拉取

當 git fetch 命令從服務器上抓取本地沒有的數據時,它並不會修改工做目錄中的內容,它只會獲取數據而後讓你本身合併。
舉例:

git fetch origin 他們會在本地生成一個遠程分支 origin/serverfix,指向服務器的serverfix 分支的引用。能夠運行 git merge origin/serverfix 將這些工做合併到當前所在的分支
當抓取到新的遠程跟蹤分支時,本地不會自動生成一份可編輯的副本(拷貝)。 換一句話說,這種狀況下,不會有一個新的 serverfix 分支
只有一個不能夠修改的 origin/serverfix 指針。 git checkout -b serverfix origin/serverfix。這會給你一個用於工做的本地分支,而且起點位於 origin/serverfix。

刪除遠程分支

git push origin --delete serverfix

基本上這個命令作的只是從服務器上移除這個指針。 Git 服務器一般會保留數據一段時間直到垃圾回收運行,因此若是不當心刪除掉了,一般是很容易恢復的。

本期就先講這麼多,分支的合併放在下一期講,也是爲了比較合併(merge)與變基(rebase)的一些差別

相關文章
相關標籤/搜索