Git的分支,其实质仅仅是个指向commit对象的可变指针。

Git会使用master作为分支的默认名字。

创建一个新的分支指针:

git branch <branch-name>

这个操作会在当前commit对象上新建一个分支指针:



屏幕剪辑的捕获时间: 2013-8-31 19:17

Git内部,保存着一个名为HEAD的特别指针,指向正在工作的本地指针,git branch命令仅仅建立了一个新的分支,但不会自动切换到这个分支。

切换到其他分支:

git checkout <branch-name>

切换后再次提交后HEAD会随分支移动但master会留在原来位置:



屏幕剪辑的捕获时间: 2013-8-31 19:21

新建并切换分支:

git checkout -b <branch-name>

合并分支:

git merge <branch-name>

如果在合并时没有什么分歧需要解决,那么Git在合并两者时只会简单地把指针前移,这个过程叫做快进(Fast forward

删除分支:

git branch -d <branch-name>

对于基本合并(需要寻找共同祖先),Git会进行一次简单的三方合并计算,对此结果做一新的快照,并自动创建一个指向它的commit,这个commit被称为合并提交(merge commit



屏幕剪辑的捕获时间: 2013-8-31 19:46

如果合并分支时遇到了冲突,Git会停下来等你解决冲突,查看冲突文件可通过git status查阅,为解决冲突的文件会以为合并(unmerged)状态列出。打开文件修改冲突部分后,运行git add将把他们标记已解决(resolved)。

如果需要一个图形界面解决合并冲突,可运行:

git mergetool

查看分支清单:

git branch

带星号的分支表示当前所在分支。

同时查看各分支最后一次commit信息:

git branch -v

筛选出已经或尚未合并的分支,可使用–merge–no-merged选项

使用-d删除为合并分支时会出错,可使用-D强制删除。

衍合:

git rebase master

它的原理是回到两个分支(你所在的分支和你想要衍合进去的分支)的共同祖先,提取你所在分支每次提交时产生的差异(diff),把这些差异分别保存到临时文件里,然后从当前分支转换到你需要衍合入的分支,依序施用每一个差异补丁文件。

如果视察一个衍合过的分支的历史记录,看起来更清楚:仿佛所有修改都是先后进行的,尽管实际上它们原来是同时发生的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

你可以管理本篇文章的订阅。

Post Navigation