1.
Git 简介及安装
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
它的诞生也颇具传奇,Linux创始人Linus花了两周时间自己用C写了
一个分布式版本控制系统,这就是Git!有兴趣的话,可查看 Git的诞生
什么是版本控制?
版本控制(Revision control)是一种软体工程技巧,
籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新。
版本控制系统/软件提供完备的版本管理功能,用于存储、追踪目录(文件夹)和文件的修改历史,
是软件开发者的必备工具,是软件公司的基础设施。版本控制软件的最高目标,是支持软件公司的配置管理活动,
追踪多个版本的开发和维护活动,及时发布软件。
常用的版本控制系统/软件有 VSS、CVS、SVN 以及 Git 等。简介详见 百度百科
什么是分布式?
分布式版本控制 (DVCS) 是一种不需要中心服务器的管理文件版本的方法,但是它也可以使用中心服务器。
更改可以被合并到 DVCS 的任何其他用户的系统中,因此可以实现非常灵活的工作流。
DVCS 的两个主要优点是:它比集中的版本控制更灵活,因为它除了支持传统的(集中式)工作流,
还支持其他各种工作流;它比集中式服务器快得多,因为大多数操作在客户机本地进行,而不需要网络操作。
为什么选择 Git ?
实际上,相对于 CVS、SVN 等主流版本控制软件,
Git 的学习成本会更高。SVN等的图形操作界面,对于用惯 Windows 系统的用户来说,
使用和理解上都比较易学。
而对于 Git 用户,需要理解更多更复杂的概念,包括文件、
快照、工作树、索引、本地资源库、远程资源库、远程、提交、分支和 Stash 等。
那相比于 CVS 与 SVN,Git 的优势到底体现在哪里?
第一,Git 底层自行维护的存储文件系统
CVS、SVN 底层采用的为增量式文件系统 。
增量式文件系统的特点是:当文件变动发生提交时,该文件系统存储的是文件的差异信息。
管理修改
为什么Git比其他版本控制系统设计得优秀,
因为Git跟踪并管理的是修改,而非文件。为达成这一目的,
暂存区存在的意义就在于此。
此外,先依据 .git/index (暂存区文件)中记录的时间戳、
长度等信息判断工作区文件是否改变。如果工作区的文件时间戳改变,
说明文件的内容可能被改变了,需要要打开文件,读取文件内容,
和更改前的原始文件相比较,判断文件内容是否被更改。
如果文件内容没有改变,则将该文件新的时间戳记录到 .git/index 文件中。
因为判断文件是否更改,使用时间戳、文件长度等信息进行比较要比通过文件内容比较要快的多,
所以 Git 这样的实现方式可以让工作区状态扫描更快速的执行,这也是 Git 高效的因素之一。
git/index 实际上就是一个包含文件索引的目录树,像是一个虚拟的工作区。在这个虚拟工作区的目录树中,
记录了文件名、文件的状态信息(时间戳、文件长度等),文件的内容并不存储其中,
而是保存在 Git 对象库(.git/objects)中,文件索引建立了文件和对象库中对象实体之间的对应。
下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系。
git checkout -- 1.txt 撤销
git reset --hard <revision> 
必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^,上上一个版本就是HEAD^^ ... 
如上,我们要把当前版本回退到最新版本,就可以使用命令行 git reset --hard ,
若使用命令行 git reset --hard HEAD^,则回滚为上一版本,此时 git log 仅显示了当前版本及其之前的信息
命令可输入版本号,前几位即可(通常前7位);显然,若回滚了昨天的版本后,又反悔了的这种情况还是时有发生的
,这时,就需要输版本号了;然则,版本号忘了怎么办。。这时,需要另一个命令帮助:
git reflog  显示操作的日志
该命令可显示操作日志,且显示了对应的版本号及信息,可查询到之前的版本号并再次回滚,
如 git reset --hard 6de39b3 。
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,
当你回退版本的时候,Git仅仅是把HEAD指向改变
分支管理
几乎每一种版本控制系统都支持分支。使用分支意味着你可以从开发主线上分离开来,然后不影响主线的同时继续工作。在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大型项目来说会花费很长时间。

  作为优越的版本控制系统,Git 对分支的管理是极其轻便易用的。本文具体说明Git是如何进行分支管理的,如分支的创建、查看、切换、删除等,以及分支的合并及冲突解决。分支对于多人协作是及其重要,内容较多,慢慢来~

有人把 Git 的分支模型称为“必杀技特性”,而正是因为它,将 Git 从版本控制系统家族里区分出来。Git 有何特别之处呢?Git 的分支可谓是难以置信的轻量级,它的新建操作几乎可以在瞬间完成,并且在不同分支间切换起来也差不多一样快。和许多其他版本控制系统不同,Git 鼓励在工作流程中频繁使用分支与合并,哪怕一天之内进行许多次都没有关系。理解分支的概念并熟练运用后,你才会意识到为什么 Git 是一个如此强大而独特的工具,并从此真正改变你的开发方式。

何谓分支

分支的理念就是分身,就像孙悟空拔出猴毛变出很多跟自己一模一样的猴子,
然后每个猴子(程序猿)做自己的事情互不干涉,等到所有猴子做完之后,
猴子集合来合并劳动成果,然后悟空就把那些猴子猴孙门统统收回了。
其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,
这些版本控制系统创建和切换分支比蜗牛还慢,
简直让人无法忍受,结果分支功能成了摆设,大家都不去用。
但Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!
无论你的版本库是1个文件还是1万个文件。
为了理解 Git 分支的实现方式,我们需要回顾一下 Git 是如何储存数据的。
或许你还记得第一章的内容,Git 保存的不是文件差异或者变化量,而只是一系列文件快照。
这就使得 Git分支创建及切换等操作就如拔毛一样迅速。
创建分支、查看及切换
在本地仓库操作一章中,可知道,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。
只是目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。
HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,
所以,HEAD指向的就是当前分支。每次提交,master分支都会向前移动一步,
这样,随着你不断提交,master分支的线也越来越长。
冲突解决
之前的merge即合并分支章节,有提及冲突;现在,来具体说明下冲突的产生及 Git是如何解决冲突的。
首先,了解下冲突的产生,如在时间节点a,从master上分支出feature1分支,feature1分支上对文件f做了更新,
此时准备merge至master;如master分支在 a时间节点后已对文件f做了更新并提交;此时,就可能产生冲突。
git 冲突就收工修改,再合并提交,over

git学习,哇瑟说实话我想要的的更多相关文章

  1. Git学习笔记与IntelliJ IDEA整合

    Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...

  2. git学习之branch分支

    作为新手,站在我的角度肤浅的来理解,分支就是相当于开辟了一个新的临时工作区,在这个工作区进行文件代码改动,然后在合并到master主工作区,这样能保证主工作区的安全性和稳定性,对于团队协作尤为重要. ...

  3. Git学习笔记(10)——搭建Git服务器

    本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...

  4. git 学习使用总结一(本地操作)

    通过几天的学习,熟悉了 git 的一些常用命令,要用熟练和操作更复杂的功能还必须继续学习.不过 git 作为工具,它是用来提高我们的工作效率的工具,系统的学习之后可以暂且放放,等到以后实际项目中用到了 ...

  5. git学习(这个我没有整理,是我不断在学习的过程中,自己总结的,对象是我,不过有问题的,我们可以相互交流)

    每次git提交,都会有一个parent指针,指向上一次的commit ,   如果合并,master就和hotfix河道一起,就直接删除hotfix就OK     此时,虽然操作一样,大底层实现不一样 ...

  6. iOS开发之git学习

    本人是参考廖雪峰的git学习的.他写的非常详细,我在这里就是把我学习中的总结以及碰到的坑写出来. /* 初始化git仓库:git init */ /* 添加文件到git仓库 */ 分两步: 第一步:追 ...

  7. Git学习之路(5)- 同步到远程仓库及多人协作问题

    ▓▓▓▓▓▓ 大致介绍 我们写好文件后添加到版本库,但是这样还没有做完,我们还需要将它同步到GitHub的远程仓库上,这里就以我们刚开始的drag项目为例,我们在Git学习之路(2)-安装GIt和创建 ...

  8. Git学习之路(6)- 分支操作

    ▓▓▓▓▓▓ 大致介绍 几乎所有的版本控制系统都会支持分支操作,分支可以让你在不影响开发主线的情况下,随心所欲的实现你的想法,但是在大多数的版本控制系统中,这个过程的效率是非常低的.就比如我在没有学习 ...

  9. git学习资料包

    1.廖雪峰老师的git教程:https://www.liaoxuefeng.com    -----点击“GIT教程”开始学习 2.菜鸟教程git学习:http://www.runoob.com/gi ...

随机推荐

  1. python入门——Anaconda安装

    初学Python,可以选择python原始的IDE,但原始的IDE在使用过程中需要自己安装各种包,个人觉得初学者不需要将时间花在这些上面,而是应该直接学习python程序,这些比较杂的事情可以在以后的 ...

  2. ESP32 LyraT音频开发板试玩(一):搭建开发环境

    我是卓波,很高兴你来看我的博客. 系列文章: ESP32 LyraT音频开发板试玩(一):搭建开发环境 ESP32 LyraT音频开发板试玩(二):播放音乐 关于ESP32的开发环境搭建,官方有教程, ...

  3. (数据科学学习手札14)Mean-Shift聚类法简单介绍及Python实现

    不管之前介绍的K-means还是K-medoids聚类,都得事先确定聚类簇的个数,而且肘部法则也并不是万能的,总会遇到难以抉择的情况,而本篇将要介绍的Mean-Shift聚类法就可以自动确定k的个数, ...

  4. 解析HTML利器AngleSharp介绍

    解析HTML利器AngleSharp介绍 AngleSharp是基于.NET(C#)开发的专门为解析xHTML源码的DLL组件. 项目地址:https://github.com/FlorianRapp ...

  5. 1、Java多线程基础:进程和线程之由来

    Java多线程基础:进程和线程之由来 在前面,已经介绍了Java的基础知识,现在我们来讨论一点稍微难一点的问题:Java并发编程.当然,Java并发编程涉及到很多方面的内容,不是一朝一夕就能够融会贯通 ...

  6. Mysql数据库的压力

    rationalError: (2006, 'MySQL server has gone away') 2017年10月10日 20:04:43 阅读数:377 问题描述 使用django+celer ...

  7. Django笔记 —— 高级视图和URL配置

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  8. 『JavaScript』核心

    弱类型语言 JavaScript是一种弱类型的语言.变量可以根据所赋的值改变类型.原始类型之间也可以进行类型转换.其弱类型的物质为其带来了极大的灵活性. 注意:原始类型使用值传递,复合类型使用引用传递 ...

  9. windows 无法上网问题解决一例

    dhcp获取ip地址,网卡驱动和ip地址获取正常,ping www.baidu.com可以ping通,但是打开浏览器或者qq上网不行,而且系统有提示腾讯管家出错的信息,初步怀疑360和腾讯管家打架导致 ...

  10. 1098 Insertion or Heap Sort (25 分)(堆)

    这里的第二序列相当于是排序还没拍好的序列 对于第二个样例的第二个序列其实已经是大顶堆了 然后才进行的堆排序 知道这个就好做了 #include<bits/stdc++.h> using n ...