版本分支

在本教程中,我們將瞭解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

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