工作有一段时间了,存在的问题很多,不知从何说起,大概这就是最大的问题,但是还是有一个很想说的就是git在工作中几乎必须用到,在工作开发中,难免(不是难免,是必然!)会遇到很多时候需要并行开发多个需求,这个时候就需要我们对分支理解透彻,对于技术真的要知其然并知其所以然。。。如果只是按部就班地学习几个常用命令,那中间会遇到各种各样奇奇怪怪的坑,平常还好,通过必应搜,但是需求紧急时,这真致命。。。所以我现在打算写一个关于git的博客,打个预防针,很多资料都是搬过来的(我只是一个搬运工,但是会搜罗全网的资料 并且以更加通俗易懂的方式来记录学习过程,使得git学者可以通过这个文章就可以把git吃透)废话不多说了。。。。开始!
一、基础知识
二、常规操作
三、Git分支
使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
//暂存操作会为每一个文件计算校验和(使用我们在 起步 中提到的 SHA-1 哈希算法),然后会把当前版本的文件快照保存到 Git 仓库中 (Git 使用 blob 对象来保存它们),最终将校验和加入到暂存区域等待提交
//当使用 git commit 进行提交操作时,Git 会先计算每一个子目录(本例中只有项目根目录)的校验和, 然后在 Git 仓库中这些校验和保存为树对象。随后,Git 便会创建一个提交对象, 它除了包含上面提到的那些信息外,还包含指向这个树对象(项目根目录)的指针。 如此一来,Git 就可以在需要的时候重现此次保存的快照。
$ git add README test.rb LICENSE
$ git commit -m 'The initial commit of my project'
分支基础命令
1、新建分支
//新建分支
git branch testing
这会在当前所在的提交对象上创建一个指针。
2、区分指向相同提交历史的分支
有一个名为 HEAD 的特殊指针,指向当前所在的本地分支。在本例中,你仍然在 master 分支上。 因为 git branch 命令仅仅 创建 一个新分支,并不会自动切换到新分支中去。
3、切换分支
要切换到一个已存在的分支,需要使用 git checkout 命令。 我们现在切换到新创建的 testing 分支去:
//这样 HEAD 就指向 testing 分支了
$ git checkout testing
4、切换分支的好处
$ vim test.rb
$ git commit -a -m 'made a change'
5、HEAD 分支随着提交操作自动向前移动
如图所示,你的 testing 分支向前移动了,但是 master 分支却没有,它仍然指向运行 git checkout 时所指的对象。 这就有意思了,现在我们切换回 master 分支看看:
$ git checkout master
这条命令做了两件事:一是使 HEAD 指回 master 分支,二是将工作目录恢复成 master 分支所指向的快照内容。 也就是说,你现在做修改的话,项目将始于一个较旧的版本。 本质上来讲,这就是忽略 testing 分支所做的修改,以便于向另一个方向进行开发。
注意:分支切换会改变你工作目录中的文件。在切换分支时,一定要注意你工作目录里的文件会被改变。 如果是切换到一个较旧的分支,你的工作目录会恢复到该分支最后一次提交时的样子。 如果 Git 不能干净利落地完成这个任务,它将禁止切换分支。
6、master分支进行新的修改提交
$ vim test.rb
$ git commit -a -m 'made other changes'
现在,这个项目的提交历史已经产生了分叉(参见 项目分叉历史)。 因为刚才你创建了一个新分支,并切换过去进行了一些工作,随后又切换回 master 分支进行了另外一些工作。
tips:创建新分支的同时切换过去通常我们会在创建一个新分支后立即切换过去,这可以用 git checkout -b < newbranchname > 一条命令搞定。