1. 程式人生 > 實用技巧 >git當中最具有特點的分支操作(上)

git當中最具有特點的分支操作(上)

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)分支。


通過上述命令的執行結果,我們就可以瞭解:像上面這樣用"-"連字元(本人習慣稱為-號)來代替分支名,就可以切換回上一次分支。(當然,將-號替換為feature-AA分支同樣也可以切換到feature-AA分支中)