很多時候我們需要給自己或者客戶用乙個穩定的版本庫, 然後同時還在開發另外乙個公升級版. 自然而然, 我們會想到把這兩者分開處理, 使用者使用穩定版, 我們開發我們的開發版. 不過 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.py
和2.py
和master
中的檔案是一模一樣的. 因為當前的指標head
在dev
分支上, 所以現在對資料夾中的檔案進行修改將不會影響到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
這種方式保留merge
的commit
資訊.
$ 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行 突然,...