Git系列6 分支 branch

2021-08-31 11:43:47 字數 2912 閱讀 6078

很多時候我們需要給自己或者客戶用乙個穩定的版本庫, 然後同時還在開發另外乙個公升級版. 自然而然, 我們會想到把這兩者分開處理, 使用者使用穩定版, 我們開發我們的開發版. 不過 git 的做法卻不一樣, 它把這兩者融合成了乙個檔案, 使用不同的分支來管理. 所以這一節我們來說說 git 中的 分支 branch.

之前我們說編輯的所有改變都是在一條主分支master上進行的. 通常我們會把master當作最終的版本, 而開發新版本或者新屬性的時候, 在另外乙個分支上進行, 這樣就能使開發和使用互不干擾了. 

我們之前的檔案當中, 僅僅只有一條master分支, 我們可以通過--graph來**分支:

$ git log --oneline --graph

# 輸出

* 47f167e back to change 1 and add comment for 1.py

* 904e1ba change 2

* c6762a1 change 1

* 13be9a7 create 1.py

接著我們建立另乙個分支dev, 並檢視所有分支:

$ git branch dev    # 建立 dev 分支

$ git branch # 檢視當前分支

# 輸出

dev

* master # * 代表了當前的 head 所在的分支

當我們想把head切換去dev分支的時候, 我們可以用到上次說的checkout:

$ git checkout dev

# 輸出

switched to branch 'dev'

--------------------------

$ git branch

# 輸出

* dev # 這時 head 已經被切換至 dev 分支

master

使用checkout -b+ 分支名, 就能直接建立和切換到新建的分支:

$ git checkout -b  dev

# 輸出

switched to a new branch 'dev'

--------------------------

$ git branch

# 輸出

* dev # 這時 head 已經被切換至 dev 分支

master

dev分支中的1.py2.pymaster中的檔案是一模一樣的. 因為當前的指標headdev分支上, 所以現在對資料夾中的檔案進行修改將不會影響到master分支.

我們在1.py上加入這一行# i was changed in dev branch, 然後再commit:

$ git commit -am "change 3 in dev"  # "-am": add 所有改變 並直接 commit
好了, 我們的開發板dev已經更新好了, 我們要將dev中的修改推送到master中, 大家就能使用到正式版中的新功能了.

首先我們要切換到master, 再將dev推送過來.

$ git checkout master   # 切換至 master 才能把其他分支合併過來

$ git merge dev # 將 dev merge 到 master 中

$ git log --oneline --graph

# 輸出

* f9584f8 change 3 in dev

* 47f167e back to change 1 and add comment for 1.py

* 904e1ba change 2

* c6762a1 change 1

* 13be9a7 create 1.py

要注意的是, 如果直接git merge dev, git 會採用預設的fast forward格式進行merge, 這樣merge的這次操作不會有commit資訊.log中也不會有分支的圖案. 我們可以採取--no-ff這種方式保留mergecommit資訊.

$ git merge --no-ff -m "keep merge info" dev         # 保留 merge 資訊

$ git log --oneline --graph

# 輸出

* c60668f keep merge info

|\

| * f9584f8 change 3 in dev # 這裡就能看出, 我們建立過乙個分支

|/

* 47f167e back to change 1 and add comment for 1.py

* 904e1ba change 2

* c6762a1 change 1

* 13be9a7 create 1.py

git實踐系列六 分支

git強大之處就是分支的快速切換,那麼分支怎麼理解呢?git 中的分支,其實本質上僅僅是個指向 commit 物件的可變指標。git 會使用 master 作為分支的預設名字。在若干次提交後,你其實已經有了乙個指向最後一次提交物件的 master 分支,它在每次提交的時候都會自動向前移動。摘自git...

Git學習之路(6) 分支操作

幾乎所有的版本控制系統都會支援分支操作,分支可以讓你在不影響開發主線的情況下,隨心所欲的實現你的想法,但是在大多數的版本控制系統中,這個過程的效率是非常低的。就比如我在沒有學習git之前,想實現我的乙個小想法,但是又害怕影響已完成的工作,只有ctrl c ctrl v,但是在git中,甚是方便了許多...

Git的使用 6 分支管理

分支的簡單的理解就是分身,就像孫悟空拔出猴毛變出很多跟自己一模一樣的猴子,然後每個猴子做自己的事情互不干涉,等到所有猴子做完之後,猴子集合來合併勞動成果,然後悟空就把那些猴子猴孫門統統收回了。git的分支也是乙個殺手鐗級別的功能!比如 你現在正在a.php裡面做新功能的增加,大約寫了300行 突然,...