git當中最具有特點的分支操作(上)
阿新 • • 發佈:2020-11-25
git分支的概述
在進行多個並行作業時,我們會用到分支。也就是說,在這類並行開發的過程中,往往同時存在多個程式碼的狀態。從master分支建立feature-A分支和feature-B分支後,每個分支都有自己的獨立狀態和程式碼。 並且,master分支是Git預設建立的分支,又稱為主分支。就是說,我們每個人在git命令列下進入到工作樹中時,所處在的預設分支就是master分支。因此,基本上所有的開發都是以這個主分支為中心進行的。
admin@LAPTOP-8PB5R6TK MINGW64 ~ --在沒進入到工作樹中時,不存在分支的概念。(或者說,可以理解為當前沒有分支) $ cd gxz/ --進入到工作樹目錄下 admin@LAPTOP-8PB5R6TK MINGW64 ~/gxz (master) --進入到工作樹中時,這裡預設就會顯示為: ~/gxz目錄(工作樹)下的master主分支(master)。 $
在不同的分支中,可以同時進行完全不同的作業。等各個分支的作業全部完成後在與主分支合併。這樣的話就可以大大的提高開發的效率。
顯示分支
git branch 命令可以將已經建立的所有分支進行顯示,以及還可以進行檢視使用者當前處於什麼分支下。具體命令如下:
$ git branch
* master --代表當前處於master(主分支下)。其中:*號代表當前處於的分支標記。
通過上述命令的執行結果可以發現,我們當前正在處於主分支下進行開發。並且上述命令的輸出結果中只有主分支並沒有其它的分支,那麼它就表示本地倉庫中(工作樹)只存在master一個分支。
git checkout -b 建立、切換分支
既然我們想使用分支,那麼首先我們必須得學會去建立分支。如果我們想以當前的master分支為基礎建立新的分支的話,我們需要用到git checkout -b 這個命令。
$ git checkout -b feature-A --代表從當前分支中建立feature-A分支,並將當前的分支切換到feature-A分支 Switched to a new branch 'feature-A' --代表成功建立並切換分支的資訊:"已經切換到了一個新分支 feature-A" admin@LAPTOP-8PB5R6TK MINGW64 ~/gxz (feature-A) --代表當前處於feature-A分支下
當然,除了上述建立分支的命令,我們還可以使用如下的命令去建立分支。
$ git branch feature-AA --我們還可以使用git branch命令從當前分支中建立feature-AA分支,但是並不切換到feature-AA分支
admin@LAPTOP-8PB5R6TK MINGW64 ~/gxz (master)
$ git branch --檢視分支列表
* feature-A --代表之前建立的feature-A分支,並在feature-A分支下
feature-AA --多了一個分支 feature-AA
master --代表主分支
建立完feature-AA分支後,我們還可以從當前分支切換到feature-AA分支
$ git checkout feature-AA
Switched to branch 'feature-AA'
admin@LAPTOP-8PB5R6TK MINGW64 ~/gxz (feature-AA) --代表從當前的分支切換到了feature-AA分支下
再來檢視一下分支列表試試看?
$ git branch --檢視分支列表
feature-A --feature-A分支
* feature-AA --代表當前處於feature-AA分支下
master --主分支
執行完上述命令之後,我們在feature-AA分支下。在這個分支下像正常開發那樣修改程式碼,執行 git add 命令並進行提交的話,程式碼就會提交到feature-AA分支下。也就是說每個分支之間的操作和檔案狀態都是獨立的。各個分支之間相互不影響。除非我們將兩個分支合併到了master主分支下才會有所改變。(合併分支的操作,我們後面馬上就會討論到)。並且,像這樣不斷對一個分支(例如上述的feature-AA分支)進行提交的操作,我們稱為"培育分支"。
關於切換分支的實際操作
下面我們來實際操作一下。我們在當前的feature-AA分支中對READ.md檔案在原來內容的基礎上去新增一行
# gao79135 --代表原來READ.md檔案當中的內容(如果不知道這個內容是從哪來的,請參考之前的git筆記)
- feature-AA --在原來READ.md檔案內容的基礎上,添加了feature-AA這行字母
新增完之後,我們在feature-AA分支中將修改完內容之後的READ.md檔案進行新增到緩衝區並進行提交。
admin@LAPTOP-8PB5R6TK MINGW64 ~/gxz (feature-AA)
$ git add READ.md --在feature-AA分支中將修改過內容後的READ.md檔案進行新增到緩衝區
warning: LF will be replaced by CRLF in READ.md.
The file will have its original line endings in your working directory.
admin@LAPTOP-8PB5R6TK MINGW64 ~/gxz (feature-AA)
$ git commit READ.md -m "Add feature-AA" --在feature-AA分支中將修改過內容後的READ.md檔案進行提交。
warning: LF will be replaced by CRLF in READ.md.
The file will have its original line endings in your working directory.
[feature-AA warning: LF will be replaced by CRLF in READ.md.
The file will have its original line endings in your working directory.
0f0ed24] Add feature-AA
warning: LF will be replaced by CRLF in READ.md.
The file will have its original line endings in your working directory.
1 file changed, 1 insertion(+)
admin@LAPTOP-8PB5R6TK MINGW64 ~/gxz (feature-AA)
$ git log --使用git log 命令檢視提交之後的日誌資訊
commit 0f0ed244ddbf99527f261dc472873b0c92de419e
Author: gao79135 <[email protected]>
Date: Wed Nov 25 21:22:46 2020 +0800
Add feature-AA --如日誌資訊所示:READ.md檔案提交成功!
...
於是,這一行(feature-AA)就新增到feature-AA分支中了。
接下來就是重頭戲了,我們來切換回master分支,來看一看master分支中的READ.md檔案有沒有收到影響。首先,我們切換回master分支,並檢視檔案。
admin@LAPTOP-8PB5R6TK MINGW64 ~/gxz (feature-AA)
$ git checkout master --使用git checkout 命令切換回主分支
Switched to branch 'master'
admin@LAPTOP-8PB5R6TK MINGW64 ~/gxz (master) --代表當前在主分支下
$ cat READ.md --檢視READ.md檔案內容
# gao79135 --發現在feature-AA分支中的READ.md檔案中新增的一行字母(- feature-AA)在master主分支中的READ.md檔案內容中並沒有進行新增。
我們發現master主分支中的READ.md檔案仍然保持原先的狀態,並沒有被新增文字。根據這樣的結果,我們就應該可以得出一套結論了:feature-AA分支中的檔案新增與更改並不會影響到其它的分支(在這個例項中為master主分支),這正是在開發中建立分支的優點。只要建立多個分支,我們就可以在不互相影響的情況下同時進行多個功能的開發。開發過後,再將各個分支的內容合併到主分支最後push到Github就可以了。
現在,我們從master主分支中再切換回feature-AA分支中。命令如下:
admin@LAPTOP-8PB5R6TK MINGW64 ~/gxz (master)
$ git checkout - --通過在 git checkout 命令的基礎上加上 - 號代表從當前分支中切換回上一次的分支(上一條分支)。這個跟linux系統中的cd - 命令(代表切換到上一次所進入的目錄)是一個性質。(如果不懂cd命令的話,就去自行百度吧,或者去學習一下linux系統的常用命令)
Switched to branch 'feature-AA'
admin@LAPTOP-8PB5R6TK MINGW64 ~/gxz (feature-AA) --代表已經從當前(master)分支中,切換回了上一次的(feature-AA)分支。