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幻灯片.绿色资源网给你提供了 ...
随机推荐
- UVALive 6525 Attacking rooks 二分匹配 经典题
题目链接:option=com_onlinejudge&Itemid=8&page=show_problem&problem=4536">点击打开链接 题意: ...
- Android应用程序的安装位置
Android应用程序的默认安装位置以及是否可移动取决于开发者在其AndroidManifest.xml中的设置: <manifestxmlns:android="http://s ...
- 通过Url传多个参数方法
MVC3通过URL传值,一般情况下都会遇到[从客户端(&)中检测到有潜在危险的 Request.Path 值]的问题 这个问题的解决方法,我的其他博文已经有了说明,这里给出连接[从客户端(&a ...
- Android入门1:使用VideoView和MediController播放视频
最近在搞Android,入门曲线还是挺陡峭的,主要还是自己对Java的理解不够深入.前后学习了几天,把最近学习到的一些知识点总结归纳一下,正所谓温故而知新. 目前想搞一个禁播视频站,主要内容都是一些大 ...
- html 页面实现指定位置的跳转
1.同页面跳转到相应位置 <a href="#id1">跳转到词条1</a> <a href="#id2">跳转到词条2&l ...
- Oracle 执行计划(Explain Plan)
如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的每一步执行是否存在问题. 如果一条SQL平时执行的好好的,却有一天突然性能很差,如果排除了系统资源和阻塞的原因,那么基本可以 ...
- MYSQL显示数据库内每个表拥有的触发器
一 所有数据库->所有触发器: SELECT * FROM information_schema.triggers; 二 当前数据库->当前所有触发器(假设当前数据库为gmvcs_ba ...
- C#_Stopwatch 类
命名空间:System.Diagnostics Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 Stopwatch 方案中,先调用 Start 方 ...
- QT小技巧学习记录
1. 光标定位最后一行 ui->revTextBrower->moveCursor(QTextCursor::End); 2. 隐藏标题栏3. 如果不考虑跨平台的话,在隐藏标题栏的 ...
- Apache虚拟主机的配置
虚拟主机的配置 基于IP地址的虚拟主机配置Listen 80DocumentRoot /www/example1ServerName www.example1.comDocumentRoot /www ...