Git 教程 - 版本分支
在本教程中,我們將瞭解 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
它的作用是建立一個分支並自動切換成此分支。因此,我們不必單獨執行上面的兩步走。
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn