分支是我最喜欢的 Git 特性之一。如果你用过其他版本控制系统,把你所知的分支给忘记,倒可能更有帮助些 —— 事实上,以我们使用分支的方式,把 Git 的分支看作上下文反而更合适。
当你检出分支时,你可以在两三个不同的分支之间来回切换。
简而言之,你可以执行 git branch (branchname) 来创建分支, 使用 git checkout (branchname) 命令切换到该分支,在该分支的上下文环境中, 提交快照等,之后可以很容易地来回切换。
当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。使用 git merge 来合并分支。你可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支。
git branch
列出、创建与管理工作上下文。
git checkout
切换到新的分支上下文。
git branch 命令是 Git 中的通用分支管理工具,可以通过它完成多项任务。 我们先说你会用到的最多的命令 —— 列出分支、创建分支和删除分支。
我们还会介绍用来切换分支的 git checkout 命令。
git branch 列出可用的分支
没有参数时,git branch 会列出你在本地的分支。你所在的分支的行首会有个星号作标记。 如果你开启了彩色模式,当前分支会用绿色显示。
$ git branch * master
此例的意思就是,我们有一个叫做“master”的分支,并且该分支是当前分支。 当你执行 git init 的时候,缺省情况下 Git 就会为你创建“master”分支。
但是这名字一点特殊意味都没有 —— 事实上你并不非得要一个叫做“master”的分支。 不过由于它是缺省分支名的缘故,绝大部分项目都有这个分支。
git branch (branchname) 创建新分支
我们动手创建一个分支,并切换过去。执行 git branch (branchname) 即可。
$ git branch testing $ git branch * master testing
现在我们可以看到,有了一个新分支。当你以此方式在上次提交更新之后创建了新分支,如果后来又有更新提交, 然后又切换到了“testing”分支,Git 将还原你的工作目录到你创建分支时候的样子 —— 你可以把它看作一个记录你当前进度的书签。
让我们实际运用看看 —— 我们用 git checkout (branch) 切换到我们要修改的分支。
$ ls README hello.rb $ echo 'test content' > test.txt $ echo 'more content' > more.txt $ git add *.txt $ git commit -m 'added two files' [master 8bd6d8b] added two files 2 files changed, 2 insertions(+), 0 deletions(-) create mode 100644 more.txt create mode 100644 test.txt $ ls README hello.rb more.txt test.txt $ git checkout testing Switched to branch 'testing' $ ls README hello.rb
当我们切换到“测试”分支的时候,我们添加的新文件被移除了。切换回“master”分支的时候,它们有又重新出现了。
$ ls README hello.rb $ git checkout master Switched to branch 'master' $ ls README hello.rb more.txt test.txt