切换一个本地分支
优质
小牛编辑
130浏览
2023-12-01
现在我们得到了一个干净的工作副本,第一件事就是要切换到,或者说 “签出(check out)” 那个新建的分支上去:
$ git checkout contact-form
概念
签出(Checkout),HEAD,和你的工作副本(Working Copy)
分支会自动指向最后一次的提交。而且,一个提交也对应项目中的一个特定版本,Git 总是非常地清楚定位哪些文件属于该分行。
在这个时间点,仅仅有一个分支被指向 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 <[email protected]>
Date: Fri Jul 26 10:56:16 2013 +0200
Add new contact form page
commit 2dfe283e6c81ca48d6edc1574b1f2d4d84ae7f1
Author: Tobias Günther <[email protected]>
Date: Fri Jul 26 10:52:04 2013 +0200
Implement the new login box
commit 2b504bee4083a20e0ef1e037eea0bd913a4d56b6
Author: Tobias Günther <[email protected]>
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 <[email protected]>
Date: Fri Jul 26 10:52:04 2013 +0200
Implement the new login box
commit 2b504bee4083a20e0ef1e037eea0bd913a4d56b6
Author: Tobias Günther <[email protected]>
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" )。这正是我们想要的结果,我们的改动应该仅仅保持在它对应的分支环境中,并不会影响其他的分支环境。