Git分支
1、分支简介:
Git 的分支,其实本质上仅仅是指向提交对象的可变指针。Git 的默认分支名字是 master。在多次提交操作之
后,你其实已经有一个指向最后那个提交对象的 master 分支。它会在每次的提交操作中自动向前移动。
1、创建分支:
git branch命令创建分支,比如创建一个testing分支,你需要使用git branch命令:
如下:
Git 又是怎么知道当前在哪一个分支上呢?也很简单,它有一个名为 HEAD 的特殊指针。请注意它和许多
其它版本控制系统(如 Subversion 或 CVS)里的 HEAD 概念完全不同。在 Git 中,它是一个指针,指向当前所
在的本地分支(译注:将 HEAD 想象为当前分支的别名)。在本例中,你仍然在 master 分支上。因为 git
branch 命令仅仅 创建 一个新分支,并不会自动切换到新分支中去。
2、分支切换:
要切换到一个已经存在的分支,你需要使用git checkout命令,我们现在切换到新创建的testing分支法:
如图所示,你的 testing 分支向前移动了,但是 master 分支却没有,它仍然指向运行 git checkout 时所
指的对象。 我们再次切回到master。
想要新建一个分支并同时切换到那个分支上,你可以运行一个带有-b参数的git checkout命令:
如下:
3、分支合并:
你可以使用git merge来合并分支,如下所示:
4、分支删除:
git branch -d xx
5、非直接先祖分支的合并:
6、分支管理:
git branch命令不仅可以创建与删除分支,如果不加任何参数,会得到当前所有分支的一个列表:
许多使用 Git 的开发者都喜欢使用这种方式来工作,比如只在 master 分支上保留完全稳定的代码——有可能仅
仅是已经发布或即将发布的代码。他们还有一些名为 develop 或者 next 的平行分支,被用来做后续开发或者
测试稳定性——这些分支不必保持绝对稳定,但是一旦达到稳定状态,它们就可以被合并入 master 分支了。这
样,在确保这些已完成的特性分支(短期分支,比如之前的 iss53 分支)能够通过所有测试,并且不会引入更
多 bug 之后,就可以合并入主干分支中,等待下一次的发布。
假设你的网络里有一个在 git.ourcompany.com 的 Git 服务器。如果你从这里克隆,Git 的 clone 命令会为你自动将其命名为 origin,
拉取它的所有数据,创建一个指向它的 master 分支的指针,并且在本地将其命名为 origin/master。Git 也会给你一个与 origin 的
master 分支在指向同一个地方的本地 master 分支,这样你就有工作的基础
如果你在本地的 master 分支做了一些工作,然而在同一时间,其他人推送提交到 git.ourcompany.com 并更新了它的 master 分支,
那么你的提交历史将向不同的方向前进。也许,只要你不与 origin 服务器连接,你的 origin/master 指针就不会移动。
如果要同步你的工作,运行 git fetch origin 命令。这个命令查找 “origin” 是哪一个服务器(在本例中,它是 git.ourcompany.com),
从中抓取本地没有的数据,并且更新本地数据库,移动 origin/master指针指向新的、更新后的位置。
7、拉取分支:
当 git fetch 命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。它只会获取数据然后让你自己合并。
然而,有一个命令叫作 git pull 在大多数情况下它的含义是一个 git fetch 紧接着一个git merge 命令。如果有一个像之前章节
中演示的设置好的跟踪分支,不管它是显式地设置还是通过 clone 或checkout 命令为你创建的,git pull 都会查找当前分支
所跟踪的服务器与分支,从服务器上抓取数据然后尝试合并入那个远程分支。
8、删除远程分支:
假设你已经通过远程分支做完所有的工作了 - 也就是说你和你的协作者已经完成了一个特性并且将其合并到了远程仓库的
master 分支(或任何其他稳定代码分支)。可以运行带有 --delete 选项的 git push 命令来删除一个远程分支。如果想要从
服务器上删除 serverfix 分支,运行下面的命令: