有人把 Git 的分支模型称为它的“必杀技特性”,也正因为这一特性,使得 Git 从众多版本控制系统中脱颖而出。 为何 Git 的分支模型如此出众呢? Git 处理分支的方式可谓是难以置信的轻量,创建新分支这一操作几乎能在瞬间完成,并且在不同分支之间的切换操作也是一样便捷。 与许多其它版本控制系统不同,Git 鼓励在工作流程中频繁地使用分支与合并,哪怕一天之内进行许多次。 理解和精通这一特性,你便会意识到 Git 是如此的强大而又独特,并且从此真正改变你的开发方式。
1、简介
Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 Git 的默认分支名字是 master。 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的 master 分支。 master 分支会在每次提交时自动向前移动。
Git 的 master 分支并不是一个特殊分支。 它就跟其它分支完全没有区别。 之所以几乎每一个仓库都有 master 分支,是因为 git init 命令默认创建它,并且大多数人都懒得去改动它。
2、分支相关命令
2.1、分支创建(git branch)
创建分支,本质只是为了创建了一个可以移动的新的指针。比如创建一个test 分支 ,你需要使用如下代码
1 | git branch test |
这会在当前所在的提交对象上创建一个指针。
git是通过HEAD的特殊指针,他指向当前所在的本地分支,而上面的 branch 命令只是创建了分支,并不会自动切换到新分支中。
==创建新分支同事切换分支,可以使用如下代码 git checkout -b test==
当前分支的记录在.git/HEAD
==如果branch后面不跟任何参数,他会得到当前所有分支的一个列表==
2.2、查看日志(git log)
1 | git log --oneline --decorate |
发现当前mster和test分支都指向了a90007b提交的对象
2.3、分支切换(git checkout )
1 | git checkout test |
在.git/HEAD中可以指向了test分支上了
git checmout master 这个命令做两件事,一个是HEAD指到master分支,二是将工作目录恢复成master分支所指向的快照内容,也就是说你现在修改的话,项目将从一个较旧的版本上,本质上来讲,就是忽略test分支所做的修改,以便于向另一个方向进行开发。
分支切换会改变你工作目录中的文件,在切换分支时,一定要注意你工作目录里的文件会被改变,如果是切换到一个较旧的分支,你的工作目录恢复到改分支最后一次提交时的样子,如果git不能干净利落的完成这个任务,他将禁止切换分支
2.4、项目分叉历史(git log --onelien --decorate --graph --all)
1 | git log --oneline --decorate --graph --all |
2.5、创建分支与
2.4、删除分支
1 | git branch -d test |
强制删除分支
1 | git brach -D test |