ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 切换一个本地分支 现在我们得到了一个干净的工作副本,第一件事就是要切换到,或者说 “签出(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" )。这正是我们想要的结果,我们的改动应该仅仅保持在它对应的分支环境中,并不会影响其他的分支环境。