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
它的作用是创建一个分支并自动切换成此分支。因此,我们不必单独执行上面的两步走。