赞
踩
1、分支的目的
假设你在写一篇论文。你已经写出了第一个版本,并提交审稿。后来,你获取了新的数据,你正在把你的数据添加到论文中。在这个过程中,审稿人让你改变你的论文的格式。很明显,你不能把你正在更改的版本修改格式后提交给他们。你只想在以前版本基础之上对格式进行修改之后发给他们。
这就是分支背后的思想,Git使这件事情变得非常容易。
注意术语:“branch”和"head"在Git中几乎是同义词,每一个分支都对应一个head,并且每个head代表一个分支。有些时候,"branch"用来指一个head以及在这个head之前的所有commits,而”head“用来指最近一次commit。
2、创建分支
要创建一个分支,例如你的仓库是这样的:
(A)--(B)--(C)
|
master
|
HEAD
要跳回commit(B)并且从那里开始新的工作,你首先应该知道怎样引用这个commit,你可以使用git log来获取commit (B) 的SHA1名字,或者你使用HEAD^来获取他。
现在,我们使用git branch命令:
git branch [new-head-name] [reference-to-(B)]
或者,例如:
git branch fix-headers HEAD^
这个命令将会使用指定的名字创建一个新的head,并且使那个head指向指定的commit object。如果那个commit object被省略,则表示指向HEAD。
现在,我们的commit树是这个样子:
(A)--(B)----------(C)
| |
fix-headers master
|
HEAD
3、在不同分支之间切换
要在一个head上开始新的工作,你应该设置fix-headers为当前的head,这是通过git checkout 命令实现的:
git checkout [head-name]
这个命令做了以下事情:
(1)使HEAD指向由[head-name]指向的head。
(2)重写目录下面的所有文件。
注意:如果在切换分支时有没有commit 的更改,Git的行为会很古怪。所以在切换分支时,一定要commit所有更改。
在切换到fix-headers head之后,你又进行了修改和commit,最后仓库可能是这个样子:
+--------------------(D)
| |
(A)--(B)--(C) |
| |
master fix-headers
|
HEAD
你现在应该明白什么叫做分支了。commit 树长处了一个分支。
4、相关命令
(1) git branch:没有参数会列出现有的heads,当前head之前有*
(2) git diff [head1]..[head2]:列出head1 和head2之间的区别
(3) git diff [head1]...[head2](中间三个点):列出head1和head2以及他们所有的祖先之间的区别。
(4) git log [head1]..[head2]:列出head2和head1和head2的公共祖先之间的更改日志。
5、通常的分支使用模式
master分支总是处于一个可发行状态,其他的分支包含未完成的工作,新特性等等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。