版本分支

在本教程中,我們將瞭解 git 版本控制系統中最重要的一個功能 - 分支。

為什麼需要分支?

到目前為止,我們只在一個分支上工作 - master 分支,它是我們建立新儲存庫時的預設分支。

一般來說,master 分支代表著程式碼的穩定版本,它一般是可以釋出的程式碼。出於這個原因,我們真的不想在主分支上進行新功能的程式碼開發,以防它把程式碼搞亂。

我們真正想要做的是,如果我們想為我們的應用程式新增一個新功能,那我們就來建立一個隔離的環境來試驗這個新功能,直到它最後完成並且測試通過,我們可以將這個新功能合併到 master 分支。

我們不向主分支新增更多提交,而是將新分支作為隔離環境工作並測試新功能。

建立新分支

$ git branch test_branch

當我們建立 test_branch 分支時,我們做的是其實是將 master 分支的程式碼狀態複製到新分支的開始,然後我們可以在這個 test_branch 分支中工作。

你可以通過 git branch 列出工作區上的可用分支,

$ git branch
* master
  test_branch

此處列出了新建立的 test_branch,以及 master 主分支。

但是現在,工作區仍然在主分支上,儘管你剛剛建立了新分支。*號後面的分支是當前的工作分支。

你需要切換到新分支才能開始在此分支上工作,

$ git checkout test_branch
Switched to branch 'test_branch'
D       test1_rename.txt

它說現在它被切換到 test_branch 分支,如果你再做一次 git branch

$ git branch
  master
* test_branch

然後我們將看到我們現在在 test_branch 分支,因為星號*已經在 test_branch 之前而不再是 master 之前。

讓我們新增一些文字到檔案 test3.txt 中,比如 This is the added line in branch test_branch.

現在,如果我們來檢視 git status,你會發現 git 已經發現了此檔案修改。

$ git status
On branch test_branch
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   test3.txt

no changes added to commit (use "git add" and/or "git commit -a")

我們可以將這些更改提交到版本庫中,具體的方法我們已經在上節中介紹過了。

我們所做的是我們建立了這個新分支並進行了一些與 master 分支隔離的更改。master 分支中的程式碼保持不變

刪除分支

在我們對新增到分支的新功能感到滿意之後,我們可以將其刪除。

$ git checkout master
$ git branch -d test_branch
error: The branch 'test_branch' is not fully merged.
If you are sure you want to delete it, run 'git branch -D test_branch'.

branch 後面的-d 參數列示它將刪除指定的分支。

在這裡,我們會看到一個錯誤說 The branch 'test_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D test_branch'.。小寫 d 僅在我們已經合併分支後才起作用,但大寫 D 可以強制刪除分支。我們將在接下來的章節中介紹如何合併分支,但是現在,讓我們使用大寫 D 來強制刪除這個分支。

$ git branch -D test_branch
Deleted branch test_branch (was 7d6bca6).

如果你現在檢查工作區的可用分支,它顯示只有 master 分支了。

$ git branch
* master

同時建立並切換成新分支

上面介紹的工作流程是首先通過 git branch 來建立分支,然後使用 git checkout 來將工作區切換成此分支。

我們還有一種更快捷的方法將這兩個步驟合二為一。

$ git checkout -b new_test_branch
Switched to a new branch 'new_test_branch'
M       test3.txt

它的作用是建立一個分支並自動切換成此分支。因此,我們不必單獨執行上面的兩步走。