git学习,哇瑟说实话我想要的
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学习,哇瑟说实话我想要的的更多相关文章
- Git学习笔记与IntelliJ IDEA整合
Git学习笔记与IntelliJ IDEA整合 一.Git学习笔记(基于Github) 1.安装和配置Git 下载地址:http://git-scm.com/downloads Git简要使用说明:h ...
- git学习之branch分支
作为新手,站在我的角度肤浅的来理解,分支就是相当于开辟了一个新的临时工作区,在这个工作区进行文件代码改动,然后在合并到master主工作区,这样能保证主工作区的安全性和稳定性,对于团队协作尤为重要. ...
- Git学习笔记(10)——搭建Git服务器
本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...
- git 学习使用总结一(本地操作)
通过几天的学习,熟悉了 git 的一些常用命令,要用熟练和操作更复杂的功能还必须继续学习.不过 git 作为工具,它是用来提高我们的工作效率的工具,系统的学习之后可以暂且放放,等到以后实际项目中用到了 ...
- git学习(这个我没有整理,是我不断在学习的过程中,自己总结的,对象是我,不过有问题的,我们可以相互交流)
每次git提交,都会有一个parent指针,指向上一次的commit , 如果合并,master就和hotfix河道一起,就直接删除hotfix就OK 此时,虽然操作一样,大底层实现不一样 ...
- iOS开发之git学习
本人是参考廖雪峰的git学习的.他写的非常详细,我在这里就是把我学习中的总结以及碰到的坑写出来. /* 初始化git仓库:git init */ /* 添加文件到git仓库 */ 分两步: 第一步:追 ...
- Git学习之路(5)- 同步到远程仓库及多人协作问题
▓▓▓▓▓▓ 大致介绍 我们写好文件后添加到版本库,但是这样还没有做完,我们还需要将它同步到GitHub的远程仓库上,这里就以我们刚开始的drag项目为例,我们在Git学习之路(2)-安装GIt和创建 ...
- Git学习之路(6)- 分支操作
▓▓▓▓▓▓ 大致介绍 几乎所有的版本控制系统都会支持分支操作,分支可以让你在不影响开发主线的情况下,随心所欲的实现你的想法,但是在大多数的版本控制系统中,这个过程的效率是非常低的.就比如我在没有学习 ...
- git学习资料包
1.廖雪峰老师的git教程:https://www.liaoxuefeng.com -----点击“GIT教程”开始学习 2.菜鸟教程git学习:http://www.runoob.com/gi ...
随机推荐
- IDEA常用操作(一)
1.视图的调整 左下右的侧边栏如何关闭?——右击选择remove from sidebar 面板上(左下右)的导航栏视图如何隐藏——可以在左下角悬停显示,单击隐藏/开启侧边栏 想打开其它视图怎么办?— ...
- Phoenix映射HBase数据表
1. 说明 安装好phoenix后对于HBase中已经存在的数据表不会自动进行映射,所以想要再phoenix中操作HBase已有数据表就需要手动进行配置. 2. 创建HBase表 > creat ...
- Java - 问题集 - 导出csv文件中文乱码
微软的excel文件需要通过文件头的bom来识别编码,所以写文件时,需要先写入bom头. FileOutputStream fos = new FileOutputStream(new File(&q ...
- .NET基础知识之八——深拷贝,浅拷贝
目录 1.概念 2.使用赋值符号"=" 3.浅复制 4.深复制 5.问题一:如果类里面嵌套有多个类,然后嵌套类里面又嵌套类,那么像上面实现深拷贝的方法还能用吗? 6.问题二:实现深 ...
- .netcore centos环境搭建实战
步骤 1. 安装VMware Workstation 下载地址:https://my.vmware.com/cn/web/vmware/info/slug/desktop_end_user_compu ...
- C#3DES加密了解一下
最近一个项目中,因为服务端是用的java开发的,客户端是用的C#,由于通信部分采用到了3DES加密,所以做个记录,以备以后需要的时候直接用. 这是对方(java)的加密算法,和网上流传的代码也差不多( ...
- Fiddler 4 实现手机App的抓包
Fiddler不但能截获各种浏览器发出的HTTP请求, 也可以截获各种智能手机发出的HTTP/HTTPS请求. Fiddler能捕获IOS设备发出的请求,比如IPhone, IPad, MacBook ...
- Linux-ls,cd,type命令
windows: dll:dynamic link library,动态链接库 Linux: .so:shared object,共享对象 操作系统: kernel:内核: 1.进程管理 2.内核管理 ...
- python基础训练营06
任务六 时长: 啥是佩奇代码复现 参考链接:https://mp.weixin.qq.com/s/whtJOrlegpWzgisYJabxOg 画一只佩奇: 代码: from turtle impor ...
- 搭建高可用的Eureka注册中心
搭建高可用的Eureka注册中心 一.搭建高可用的Eureka的作用 当服务器因种种原因导致Eureka注册中心(后面简称Eureka)服务当机(服务器跪了,异常关闭停止服务).这样就会影响到整个业务 ...