# 切换一个本地分支
现在我们得到了一个干净的工作副本,第一件事就是要切换到,或者说 “签出(check out)” 那个新建的分支上去:
```
$ git checkout contact-form
```
##### 概念
#### 签出(Checkout),HEAD,和你的工作副本(Working Copy)
分支会自动指向最后一次的提交。而且,一个提交也对应项目中的一个特定版本,Git 总是非常地清楚定位哪些文件属于该分行。
![branch-pointers](https://box.kancloud.cn/2016-05-04_572967d9df8a6.png)
在这个时间点,仅仅有**一个**分支被指向 HEAD,或者说仅仅有**一个**被签出(checked out)的活动分支。在你的工作副本上的文件都会被关联在这个分支上。所有其它的分支以及它们的关联文件都被安全地保存在 Git 的数据库中了。
指定另外一个分支为活动分支(比如我们之前建立的 “contact-form” ),可以使用 “git checkout” 命令。 这个命令会为我们完成两件事:
* (a) 它会让 HEAD 指针指向这个 “contact-form” 分支。
* (b) 它会替换你工作目录(working directory)中的所有文件,并且完全匹配它们的版本到 “contact-form”。
再执行一下 “git status” 命令,你将看到我们现在已经切换到分支 “contact-form” 上了。从现在开始我们所有的改动和提交都将只适用于这个分支,直到我们再次使用 “checkout” 命令切换到其它分支上去。
让我们来验证一下。建立一个新的文件并且命名为 “contact.html” 然后提交它:
```
$ git add contact.html
$ git commit -m "Add new contact form page"
$ git log
commit 56eddd14cf034f4bcb8dc9cbf847b33309fa5180
Author: Tobias Günther <support@learn-git.com>
Date: Fri Jul 26 10:56:16 2013 +0200
Add new contact form page
commit 2dfe283e6c81ca48d6edc1574b1f2d4d84ae7f1
Author: Tobias Günther <support@learn-git.com>
Date: Fri Jul 26 10:52:04 2013 +0200
Implement the new login box
commit 2b504bee4083a20e0ef1e037eea0bd913a4d56b6
Author: Tobias Günther <support@learn-git.com>
Date: Fri Jul 26 10:05:48 2013 +0200
Change headlines for about and imprint
```
注意观察这个日志信息,你会看到那个新提交的文件被正确保存下来了,到目前为止这并没有什么特别的。但是现在让我们切换回 “master” 分支,并且再来观察下一个它的日志信息:
```
$ git checkout master
$ git log
commit 2dfe283e6c81ca48d6edc1574b1f2d4d84ae7f1
Author: Tobias Günther <support@learn-git.com>
Date: Fri Jul 26 10:52:04 2013 +0200
Implement the new login box
commit 2b504bee4083a20e0ef1e037eea0bd913a4d56b6
Author: Tobias Günther <support@learn-git.com>
Date: Fri Jul 26 10:05:48 2013 +0200
Change headlines for about and imprint
```
你会发现到那个注释为 “Add new contact form page” 的提交并不在这里,这是因为我们操作仅仅只针对于当时的那个 HEAD 分支(当时的 HEAD 分支应该是 “contact-form”,而不是 “master" )。这正是我们想要的结果,我们的改动应该仅仅保持在它对应的分支环境中,并不会影响其他的分支环境。
- Learn Version Control with Git 中文版
- 前言
- Part 1 - 基础知识
- 什么是版本控制?
- 为什么要使用版本控制系统?
- 准备工作
- 版本控制的基本工作流程
- 从一个未被纳入版本控制的项目开始
- 从一个已被纳入版本控制的项目开始
- 工作在你的项目上
- Part 2 - 分支与合并
- 分支可以改变你的生命
- 在分支上工作
- 暂时保存更改
- 切换一个本地分支
- 合并改动
- 分支的工作流程
- Part 3 - 远程仓库
- 关于远程仓库
- 连接一个远程仓库
- 查看远程数据
- 整合远程的改动
- 发布一个本地分支
- 删除分支
- Part 4 - 高级应用
- 撤销操作
- 用 diff 来检查改动
- 处理合并冲突
- Rebase 代替合并
- 子模块
- git-flow 的工作流程
- 使用 SSH 公钥验证
- Part 5 - 工具与服务
- 桌面应用程序
- 比较和整合工具
- 代码托管服务
- 更多学习资源
- 附录
- 版本控制的最佳实践
- 命令 101
- 从 Subversion 过渡到 Git
- 为什么选择 Git