git快速入门教程

    前阵子花了一点时间学习git,完成了从小白到菜鸟的阶段。下面,通过这篇文章分享一下我的一些学习心得。

一 推荐资料

1 pro git https://gitee.com/progit/

2 廖雪峰的教程 https://www.liaoxuefeng.com/wiki/896043488029600

    这两个资料要配合着看,git的基本原理和概念建议看pro git,里面的语言表述严禁且清晰,而且会配以准确的图片进行说明。然后可以快速过一遍廖雪峰的教程,作为补充。这些资料里面对于reset和rebase的用法介绍的不够详细,这两个命令建议单独谷歌搜索资料进行学习。

二 快速入门

     以下内容在上文所推荐的资料里面都能找到,本文重点讲解一些git的基本原理,基于上述资料加上自己的一点理解。

1 git的作用

(1)版本控制

    软件项目开发的过程中会有很多个版本,各种不同功能的版本及其各个历史版本,因此需要管理项目的各种版本。

    git基于文件快照技术(snapshot),可以以很小的文件体积保存各个版本的项目文件(比起把每一个版本的全量项目文件全都保存下来,要小得多),每一个版本对应一个文件快照。

(2)开发管理

    git基于分支的概念,可以便于项目的管理。

    git是分布式的版本管理系统,每个开发者将可以将整个工程克隆到本地进行开发,开发完成之后再提交到远程服务器上。

2 git基本运行逻辑

    将一个项目交托给git管理后,git会跟踪项目文件的变化。可以随时把这些变化进行提交,提交完成后会git会记录下这次提交完成后的项目状态(也就是一个版本),会有一个对应的id值,可以很容易地把项目切换到任何一个版本状态上。


git版本管理原理

3 指针的概念

    git通过一种类似链表的形式管理版本,每一次提交(可以理解为一个版本)对应一个节点。当前的开发环境有一个指针(HEAD),可以通过改变这个指针到指向的节点,就可以切回到该版本。一般HEAD指针与当前指向当前所在分支的最新节点,不过也可以强行将HEAD与分支最新节点分离。


指针

4 分支的概念

    假设没有任何分支,则只有一个主干分支(一般称为master),每次提交之后都会把新的提交节点加入到链表,并且把master指针指向最新的节点。


主分支

    分支就是,新建一个指针指向当前的节点(如图中的testing)。当你在该分支开发并进行提交的时候,会生成一个提交节点,并会把该提交节点接上去,最后把分支指针指向新的节点。


子分支


子分支提交

5 分支合并

    首先,这里强调,合并是有主动被动之分的,把“A合并到B”与把“B合并到A”是不一样的。假设目前工作在A分支上,然后就能把其它分支合并到A上。

    假设当前的分支结构如示意图1所示,要把hotfix合并到master,则把master指针指向hotfix指向的节点即可,如合并分支示意图2所示。由于hotfix就是master的前驱位置,则这种模式“Fast forward”。

         

合并分支示意图1

    

合并分支示意图2

    假设当前的分支结构如合并分支示意图3所示,则要把iss53合并到master则要复杂一些。首先,git会找到两个分支的共同祖先节点,如图中C2。然后把master与iss53所指向的节点(C4与C5)分别与C2做一个比较(diff),从而得出C4与C5对C2的“修改”(diff)。假设这两个修改没有冲突,则把这两个修改合并在一起,生成一个提交节点,然后再把master的指针指向新的节点,如合并分支示意图4所示。

合并分支示意图3


合并分支示意图4

6 冲突的定义

    个人感觉,这是上面推荐的资料里面最缺漏的地方,没有对“冲突”做一个定义,很容易让初学者困惑。

    冲突是基于diff的,合并的冲突实则上是diff的冲突。每一个diff会记录你的改动内容,假如两个diff之间的改动内容冲突了,则合并出现冲突。而这些冲突一般而言是改动的重叠,比如说A对一个文件修改了第五行,B对A文件同样修改了第五行,则出现冲突。

     前面讲合并的时候,已经有提到过。合并的时候,假设不能走“Fast forward”,则会把两个分支与其共同祖先分别做diff。然后假设两个diff之间与冲突,则出现合并冲突。

7 远程分支与本地分支的关系

    初始的时候,拉取一个远程分支到本地,会自动建立一个指向最新节点的远程分支指针和一个本地分支指针,如图所示。

远程分支与本地分支的关系

    当在本地开发并不断提交,本地指针则会不断向前走,与远程指针分离,如图的下半部分所示。与此同时,远程分支(服务器上的)可能已经有人进行了提交,这个时候的远程指针指向节点与远程分支的最新节点已经不是同一个了。

远程分支与本地分支的关系

    这个时候fetch远程分支到本地,则会把远程分支新的提交节点加载到本地,并把远程指针指向最新的节点,如图所示。如果用的是pull,则会多出的操作是,把本地的分支与新的远程分支进行合并。    

远程分支与本地分支的关系
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • Git 使用教程 一、Git 的安装 Windows版本 : 直接前往git官网下载msysgit安装包进行安装即...
    CeeYang阅读 588评论 0 2
  • 声明:这篇文章来源于廖雪峰老师的官方网站,我仅仅是作为学习之用 Git简介 Git是什么? Git是目前世界上最先...
    横渡阅读 3,952评论 3 27
  • (预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料) 一:Git是什么? Git是目前世界上最先进的...
    axiaochao阅读 1,931评论 1 8
  • git 使用笔记 git原理: 文件(blob)对象,树(tree)对象,提交(commit)对象 tree对象 ...
    神刀阅读 3,767评论 0 10
  • 你是否遇到过在公司电脑撸码时需要链接到公司的git私服,同时又要写写个人的代码到github的尴尬,我想你一定有过...
    okeeper阅读 299评论 0 0