Git的杀手级特性--分支git
1.几乎全部的版本控制系统都以某种形式支持分支。 使用分支意味着你能够把你的工做从开发主线上分离开来,以避免影响开发主线。与许多其它版本控制系统不一样,Git 鼓励在工做流程中频繁地使用分支与合并,哪怕一天以内进行许屡次。 理解和精通这一特性,你便会意识到 Git 是如此的强大而又独特,而且今后真正改变你的开发方式。测试
建立新分支:$ git branch testingfetch
切换新分支:$ git checkout testing网站
提交新分支:git commit -a -m 'made other changes' 加上注视spa
运行 git log --oneline --decorate --graph --all ,它会输出你的提交历史、各个分支的指向以及项目的分支分叉状况。版本控制
因为 Git 的分支实质上仅是包含所指对象校验和(长度为 40 的 SHA-1 值字符串)的文件,因此它的建立和销毁都异常高效。 建立一个新分支就至关于往一个文件中写入 41 个字节(40 个字符和 1 个换行符),如此的简单能不快吗?这与过去大多数版本控制系统造成了鲜明的对比,它们在建立分支时,将全部的项目文件都复制一遍,并保存到一个特定的目录。 完成这样繁琐的过程一般须要好几秒钟,有时甚至须要好几分钟。所需时间的长短,彻底决于项目的规模。而在 Git 中,任何规模的项目都能在瞬间建立新分支。 同时,因为每次提交都会记录父对象,因此寻找恰当的合并基础(译注:即共同祖先)也是一样的简单和高效。 这些高效的特性使得 Git 鼓励开发人员频繁地建立和使用分支。每次提交都会记录父对象,即保存一次快照,便于以后将不一样分支进行合并。指针
2.一个分支的使用例子:server
让咱们来看一个简单的分支新建与分支合并的例子,实际工做中你可能会用到相似的工做流。 你将经历以下步骤:对象
1. 开发某个网站。
2. 为实现某个新的需求,建立一个分支。
3. 在这个分支上开展工做。
正在此时,你忽然接到一个电话说有个很严重的问题须要紧急修补。 你将按照以下方式来处理:
1. 切换到你的线上分支(production branch)。
2. 为这个紧急任务新建一个分支,并在其中修复它。
3. 在测试经过以后,切换回线上分支,而后合并这个修补分支,最后将改动推送到线上分支。
4. 切换回你最初工做的分支上,继续工做。blog
你已经决定要解决你的公司使用的问题追踪系统中的 #53 问题。 想要新建一个分支并同时切换到那个分
支上,你能够运行一个带有 -b 参数的 git checkout 命令: git checkout -b iss53 #建立新分支并切换到该分支,它是下面两条命令的简写:
$ git branch iss53
$ git checkout iss53
如今你接到那个电话,有个紧急问题等待你来解决。 有了 Git 的帮助,你没必要把这个紧急问题和 iss53 的修改混在一块儿,你也不须要花大力气来还原关于 53# 问题的修改,而后再添加关于这个紧急问题的修改,最后将这个修改提交到线上分支。 你所要作的仅仅是切换回 master 分支。可是,在你这么作以前,要留意你的工做目录和暂存区里那些尚未被提交的修改,它可能会和你即将检出的分支产生冲突从而阻止 Git 切换到该分支。 最好的方法是,在你切换分支以前,保持好一个干净的状态。 有一些方法能够绕过这个问题(即,保存进度(stashing) 和 修补提交(commit amending)),(目前的理解是进行commit保存在本地,以便于之后再check回来)。咱们会在储藏与清理 中看到关于这两个命令的介绍。 如今,咱们假设你已经把你的修改所有提交了,这时你能够切换回master 分支了:
$ git checkout master
Switched to branch 'master'
能够在master分支上新建一个分支hotfix来解决这个紧急问题,而后再切换到master分支将hotfix分支merge到master分支,此时master分支和hotfix分支指向同一个版本快照,此时能够删除hotfix分支了
删除分支
而后回到以前的iss53分支,能够把修复了hotfix问题的master分支merge到iss53分支里,
远程分支:远程引用是对远程仓库的引用,包括分支,标签等。
origin与master同样并没有特殊含义,只是克隆时系统默认的名字,能够在克隆时进行更改。
这段能够看数来理解,更连贯一些
clone
fetch
fetch
fetch以后不会生成一个新的serverfix分支,只会有一个不可修改的origin/serverfix指针,想要将这些工做合并到新的分支,能够运行 git merge origin/serverfix 若是想要在本身的
serverfix 分支上工做,能够将其创建在远程跟踪分支之上:(即在本地新建一个基于远程此分支的新分支)
$ git checkout -b serverfix origin/serverfix
而后就能够用他的代码在本地进行开发了。
push
推送本地的 serverfix 分支,将其做为远程仓库的 serverfix 分支” 能够经过这种格式来推送本地分支
到一个命名不相同的远程分支。 若是并不想让远程仓库上的分支叫作 serverfix,能够运行 git push
origin serverfix:awesomebranch 来将本地的 serverfix 分支推送到远程仓库上的 awesomebranch
分支。
前三章看完了,来实际操做练习练习。