5分钟精通git教程
git是一个版本控制工具,就要先弄清楚什么是版本
版本:
- 对外发布的版本如v1.0.0,v1.1.0 叫version
- 内部代码的版本叫commit,如:修改了一个错别字
- 顾名思义一个version就是很多个commit的集合
那一个commit又包含哪些内容,比如有一个文件里边的内容是:
京口瓜洲一水间
钟山只隔数重山
春风又到江南岸
明月何时照我还
后来改成了
京口瓜洲一水间
钟山只隔数重山
春风又过江南岸
明月何时照我还
那这次改动就是一次commit
- 新的文件就是新版本
- 旧的文件就是旧版本
- 从旧到新的差异叫变更(diff)
可以理解为一个commit里边存的就是一个差异,比如上例就可以表示为:
-春风又到江南岸
+春风又过江南岸
这样我们就可以清楚的知道某个版本做了什么样的修改,同时还能知道这个时候文件的全部内容是什么样的
为了能准确定位到某个版本,git给每个commit一个独一无二的ID,比如a823b1这样的16进制数(可以只用前几位,只要唯一就行)
commit-ID的生成算法:使用当前版本的所有文件内容和父commit-ID算一个hash值
分支
如果刚好有另外一个人也对源文件做了修改:
-春风又到江南岸
+春风又绿江南岸
那这时候就会有俩条版本线(分支)
┌──────过(a8)
到(c3)
└──────绿(b2)
括号里是commit-ID
git实现版本线的方法很巧妙:
- 为每个commit再添加一个属性:父commit-ID
- 为每个分支添加一个属性 当前commit-ID(HEAD)
HEAD=a8
|
┌──────过(a8)
到(c3)
└──────绿(b2)
|
HEAD=b2
比如:
- 你的分支存的当前commit-ID为
a8 - 找到ID为
a8的commit,查到他的父commit-ID为c3 - 重复上一步
这样就可以形成一条分支线
分支原理很重要几乎所有神乎其技的git操作都是通过它实现的
这个时候俩条版本线是孤立的,如果只是这样简单的各干各的,那咱们的教程也就《全剧终》了
可惜原作者采纳了绿的建议,但也要对过做记录,这时候就该版本管理工具提供的更加强大的功能协作出马,我们一起为同一个项目添砖添瓦,然后统一意见(分支合并)
合并后的整个版本变更过程就变成:
到 过 绿
git合并分支有俩种办法:merge,rebase。在git使用中不用merge是可以的,但rebase是必须技能,所以本教程只讲解rebase,merge请参见其他教程。
整个合并的步骤:
- 在
b2所在的分支上操作(因为他是最终的修改) - 将
b2的变更加到a8后边 - 将
b2的 父commit-ID 设置为a8 - 重新为
b2算一个新的commit-ID1e - 修改本分支的HEAD为
1e
如下所示:
HEAD=a8
|
到(c3)──────过(a8)──────绿(1e)
|
HEAD=1e
三个库
分支
在git中我们一般会使用master分支作为主分支(成熟的分支),平常我们会在master分支上支出来一个新的不成熟分支进行开发,以便在遇到bug或者新需求时再基于master拉一个纯净的分支,这些分支都是存储于本地库中,除了本地库还有远程库、远程镜像库
远程库
就是我们的git服务器,他其实和我们的本地库是一模一样的存在,它和每个人的工作目录没有任何区别,只是我们把这台机器作为中心节点汇总我们的改动。默认名字是origin。
远程镜像库
git是一个离线版本控制系统,它设计了很多功能以支持离线工作。远程镜像库顾名思义就是远程库的一个本地镜像,我们不可以修改它,只能让他更新。这样所有读取远程库就变成本地操作。
git fetch 更新远程镜像库
git brannch 显示所有分支,以remote打头的都是远程镜像库里的分支(像上边说的我们无法直接查看远程库中分支)
如何更新本地库
git不能更新库。操作的对象只是分支和commit,我们只是用本地分支合并远程分支,也就是让本地分支包含远程分支的所有commit,也就达到了更新本地分支的效果(是不是和合并本地分支是一样的道理)
具体操作:git rebase origin/master
提交代码到服务器
将我们的master分支更新到和远程master一样后就可以推送commit到远程库
git push orgin master 将本地master分支推送到远程库(以及远程镜像库)master分支
其他的远程分支
其他的远程分支其实和master分支是一样的,只是我们使用master作为最成熟的代码分支。如果怕电脑硬盘坏导致未推送到远程master的代码丢失,我们就可以push到远程其他分支保存我们的分支。或者是几个人公共开发同一个功能也需要一个远程分支来汇总大家的工作进展
本文都是一些概念用于大家对git有一个总体的理解,具体操作还需查看pro git、git help或其他教程。
5分钟精通git教程的更多相关文章
- 30分钟新手git教程
本文转载自:http://igeekbar.com/igeekbar/post/82.htm Git近些年的火爆程度非同一般,这个版本控制系统被广泛地用在大型开源项目(比如Linux),不同规模的团队 ...
- 从零开始学数据分析,什么程度可以找到工作?( 内附20G、5000分钟数据分析工具教程大合集 )
从零开始学数据分析,什么程度可以找到工作?( 内附20G.5000分钟数据分析工具教程大合集 ) 我现在在Coursera上面学data science 中的R programming,过去很少接 ...
- Git 教程(一):简介和安装
为什么要编写这个教程?因为我在学习Git的过程中,买过书,也在网上Google了一堆Git相关的文章和教程,但令人失望的是,这些教程不是难得令人发指,就是简单得一笔带过,或者,只支离破碎地介绍Git的 ...
- Git-Runoob:Git 教程
ylbtech-Git-Runoob:Git 教程 1.返回顶部 1. Git 教程 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torva ...
- 21分钟 MySQL 入门教程(转载!!!)
21分钟 MySQL 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数 ...
- Git教程推荐
推荐:廖雪峰的官方网站-Git教程,面向初学者,浅显易懂.
- js基础到精通全面教程--JS教程
适合阅读范围:对JavaScript一无所知-离精通只差一步之遥的人 基础知识:HTML JavaScript就这么回事1:基础知识 1 创建脚本块 1: <script language=”J ...
- Git 教程
Git 教程 新建 模板 小书匠 欢迎使用 小书匠(xiaoshujiang)编辑器,您可以通过设置里的修改模板来改变新建文章的内容. Git使用 Git - 关于版本控制 TortoiseGit日常 ...
- 办公软件Office PPT 2010视频教程从入门到精通系列教程(22课时)
办公软件Office PPT 2010视频教程从入门到精通系列教程(22课时) 乔布斯的成功离不开美轮美奂的幻灯片效果,一个成功的商务人士.部门经理也少不了各种各样的PPT幻灯片.绿色资源网给你提供了 ...
随机推荐
- Android利用setLayoutParams在代码中调整布局(Margin和居中)
我们平常可以直接在xml里设置margin,如: <ImageView android:layout_margin="5dip" android:src="@dra ...
- Android Sensor Test
魅蓝note可用 [{Sensor name="MPL Gyroscope", vendor="Invensense", version=1, type=4, ...
- c++中基本的语法问题
的输出是? 答案:构造函数的初始化列表 字符串转化为整形的代码: enum Status{ kValid = 0,kInvalid }; int g_nStatus = kValid; int Str ...
- [Javascript] Array methods in depth - indexOf
indexOf is used to search for a value or reference inside of an array. In this lesson we first look ...
- HDU 5067-Harry And Dig Machine(DFS)
Harry And Dig Machine Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- .NET2.0下的对象生成JSON数据
前言:今天研究了下在.NET2.0环境下开发Ajax程序经常用到的一个数据类型JSON, 一.什么是JSON? 自己也写不了句子不是很专业,下面是百度百科的关于JSON的介绍: JSON(JavaSc ...
- 初学Pexpect
概述 Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块 ...
- python 下的数据结构与算法---5:递归(Recursion)
定义:递归就是不断分割整体成部分直到可以轻易解决分割出来的部分. 递归表达式三定律: 1:递归表达式必须有个最小单元 (最小单元既是停止递归调用以及能够直接运算的) 2:递归表达式在运算过程中 ...
- iOS_SN_地图的使用(2)
上一篇讲的是地图的基本使用,和注意事项,这一篇主要讲POI检索.百度地图SDK提供三种类型的POI检索:周边检索.区域检索和城市内检索.下面将以周边检索为例,向大家介绍如何使用检索服务. - (voi ...
- uva 469 - Wetlands of Florida
题目:给你一个矩阵和某些点,找到给的点所处连续的W区域的面积(八个方向). 分析:搜索.floodfill算法,利用搜索直接求解就可以了. 说明:注意读入数据的格式. #include <cst ...