分布式版本控制系统--git

一.什么是Git

1.Git是什么

Git是目前世界上最先进的分布式版本控制系统(没有之一)。

实际上版本控制系统有如下几个:

1) CVS

2)  SVN

3) Git

这个概念中有两个疑问:

1. 什么是版本控制

2.什么是分布式?

2.为什么需要Git

大家熟悉的一个场景:论文

类似的场景,在软件开发中更为普遍。

分组完成项目的时候

1)多人协作,是如何完成的?

2)开发自己的任务的时候,从写第一行代码开始到整个结束,有没有来回修改?

如何来解决这些问题呢?

早期,在项目规模还没有那么大的时候,大家制定一些规则,手动解决就行。

随着软件和项目规模的增大,这种手动方式,效率太低,问题太多,不能满足开发的需求。

需要有相应的工具来解决 --- 于是就出现了 版本控制系统。

1)CVS,功能比较弱,现在很少使用

2)SVN,功能比较完善,使用比较多

3)Git,功能最强大的,也是最受欢迎的。

所以,版本控制可以帮助我们实现两件事情:

1)自动记录每次的修改,并且可以方便的切换到任一版本

2)可以完成多人协作开发

3.Git和GitHub有何区别

Git,是一个版本控制系统,实际上是一个工具,大多数都是基于命令行的。

GitHub,是一个使用Git作为版本控制的托管代码的网站,平台

重点在于学习Git本身。

二.快速入门

1.安装Git

Git在多个操作系统均有相应的安装包。

使用windows系统。

还是一个典型的windows软件的安装

官网:https://git-scm.com/downloads/

这个表示加入了windows的path变量,意味着可以在cmd窗口中使用。

安装完成之后,我们可以在任意目录下,点击鼠标右键,弹出右键菜单,有两个选项:

1.Git GUI Here

2.Git bash Here

Git GUI here,其实就是一个可视化的界面,使用鼠标就可以完成相应操作。如下:

Git bash Here

命令行窗口

2.使用流程

基本的使用流程如下:

1)初始化一个Git仓库(git init)

2)设置用户名和邮箱

3)添加文件到仓库(git add 文件名1 文件名2 )

4) 提交 (git commit -m 说明文字)

5)查看版本 (git log)

6)回退 (git reset --hard HEAD^/commit_id)

(1).初始化一个Git仓库(git init)

首先,需要指定我们的项目目录,比如此处放在project目录下,

使用git init 来初始化一个Git仓库。

在当前目录下打开 git bash 窗口,输入git init命令,如下:

repository: 仓库

相应的,会在当前目录下,创建一个隐藏的.git目录,

我们在开发的时候,是不能去动这个目录的。

如下:

(2).设置用户名和邮箱

使用

git config user.name 用户名

git config  user.email 邮箱

(3).添加文件到仓库(git add 文件名1 文件名2 )

我们需要在project目录下,开始开发。

使用 git add 文件名,将其添加到版本库

(4).提交 (git commit -m 说明文字)

使用git add只是将其添加到git 的暂存区,需要使用git commit进行提交,同时必须要加上说明文字。

(5).查看版本 (git log)

接下来,需要重复3~5。

比如,我新建一个base.css文件,将其引入到 index.html中,所以,又需要add

再次commit

(6).回退 (git reset --hard HEAD^/commit_id)

第三天开发,发现需要回到第一个版本

使用 git reset --hard HEAD^会退到上一个版本。

我又后悔,需要再回到第二个版本。这是当前版本的未来版本,必须使用commit_id来reset。

回退如下:

此时,就已经切换到第二个版本。

三.Git基本概念及原理

1.基本概念

在使用git的时候,通常会提到如下几个术语:

1)工作区

2)版本库

3) 暂存区

4)分支

当我们使用git init命令初始化仓库的时候,创建一个隐藏的目录---- .git

这个文件夹将我们的项目目录一分为二:

1.版本库(仓库)

2.工作区

1)凡是在.git目录中的,都是属于版本库的

2)凡是在.git目录之外的,都是属于工作区的。

我们的项目目录

一旦我们创建了版本库,在开发的时候,就不能对版本库目录做任何的操作。

我们开发的操作都是在工作区进行的,新建、修改、删除都是在工作区进行的。

也就是说,我们的常规开发都是在工作区进行的。

对于工作区的内容,其实就是我们常规的和项目相关的文件和文件夹。

对于版本库,还需要进一步的去看看里面有什么东西。

版本库,又一分为二:

1) 暂存区

2)主分支

暂存区:stage,临时保存文件的一个区域,就相当于是一个中转站。工作区中的任何内容都是需要通过暂存区,才能提交真正的分支上去。

主分支:master,它才是保存各个版本的地方

2.基本原理

理解Git的关键在于 暂存区 的理解。

前面我们使用Git提交版本的时候,其实分成了两步:

1) 使用git add命令

2)使用git commit命令

实际上,我们在将工作区的文件提交给版本库的时候,首先是将其添加到 暂存区,然后才是从暂存区再提交给主分支。

1)git add ,将文件添加到 版本库的 暂存区。

2)git commit ,将暂存区所有的文件一次性提交个 主分支。

我们不能直接从工作区到 主分支,必须要经过暂存区。

结合命令再次来看看这个过程。

使用 git status 可以查看 git版本库的状态。

在text项目目录下,新建一个版本库,目前工作区没有任何内容,如下:

使用 git status命令,查看 版本库的状态:

在工作区中,新建一个index.html文件,如下:

再次使用 git status查看,如下:

采纳它的建议,使用git add命令,将index.html添加到版本库的暂存区,如下:

再次查看状态,如下:

说明这个文件,已经被放入暂存区了。

使用git commit 将其从暂存区提交到 主分支,如下:

再次查看状态:

说明暂存区空了。

可以参考图示。

四.基本操作

实际上,就是几个常见命令,包括如下几个:

1)git config

2)git init

3) git add

4)git commit

5)git status

6)git rese

Git可以完成两件事情:

1.版本控制

2.多人协作

此处,讨论都是针对个人的版本控制。

1.git config

用户获取/设置git的一些配置。

获取git的配置,使用 git config --list

我们重点关注的就只有 用户名和邮箱的一个设置

git config user.name 用户名

git config user.email 邮箱名

如果需要设置全局的,可以加 --global

如果是第一次安装 git,user.name 和 user.email是没有的,所以需要设置一下。

2.git init

用于初始化一个版本库。

可以用两种方式来初始化

1.先创建一个目录,在这个目录下,使用git init命令

2.直接使用 git init 项目名称,初始化

不管是哪种方式,都会在 项目目录下,新建一个.git目录,该目录就是 版本库,这个目录是隐藏,也不允许用户进行任何的操作。需要对版本库进行操作,使用命令操作即可。

3.git add

作用:将文件从 工作区 添加到 版本库的 暂存区

格式:git add 文件名1 文件名2 文件3

此处,也可以添加文件夹。

查看状态,如下:

4.git commit

作用:将所有文件一次性从暂存区 提交给 主分支,才会形成一个版本。

格式:git commit -m 说明文字

一旦commit,就会将其提交个主分支,形成一个新的版本,同时会将暂存区清空。

在使用的时候,需要注意的一个问题  ---- 必须要添加说明文字。

添加说明文字有两种方式:

1)使用 -m 参数 (推荐)

2)进入vi编辑器,然后编辑

如果在git commit的时候,没有加上 -m ,就会进入vi编辑器,如图:

在vi编辑器中,两种种模式:

1)输入模式,允许用户输入内容

2)命令模式,可以执行相关的一些命令

默认进来是一个命令模式,切换到输入模式,按下 i,就可以输入相应的说明文字。

按下ESC键,就退出输入模式,进入命令模式。

如果想保存退出,需要输入 :wq

推荐大家使用-m参数来添加说明文字。

5.git status

作用:查看版本库的状态,重点就是暂存区。

格式:git status

重点就是 读懂不同的情况下的说明信息:

6.git reset

作用:用于切换到某一个版本

格式:git reset --hard HEAD^ /commit_id

一旦我们将项目形成多个版本,就可以使用git reset切换到任意版本。

通常需要查看当前版本库的日志信息。使用git log来查看,如下:

现在就可以使用git reset命令回退。

如果是会退到之前的版本,可以使用HEAD关键字和commit_id。

HEAD^,回退到之前的一个版本

HEAD^^,回退到之前的两个版本

HEAD^^^,回退到之前的三个版本

如果大于3的话,HEAD^10

更好的方法就是使用 commit_id。

如果需要回退到当前版本的未来版本,必须使用commit_id。如果使用HEAD,会回退到更小的版本。

再回到未来版本时,要分两种情况:

我已经使用了git log查看过版本情况,直接拿到那个commit_id即可。

如果没有使用git log查看过版本,使用git reflog可以查看整个commit_id情况。

Git详细教程(1)---个人Git的基本使用的更多相关文章

  1. git详细教程

    Table of Contents 1 Git详细教程 1.1 Git简介 1.1.1 Git是何方神圣? 1.1.2 重要的术语 1.1.3 索引 1.2 Git安装 1.3 Git配置 1.3.1 ...

  2. mac os 利用ssh 搭建git server服务器详细教程,以及git基本用法

    详细讲mac 连接mac的git操作 首先在服务端上 第一:新建一个仓库 1, cd /Users/userName/projects 用linux命令进入一个你想要创建与他人共享的文件夹. 2,su ...

  3. git 详细教程和常用操作指令

    git 内部工作原理图 如上图,git 一般可以分为三个区:工作区.暂存区.版本库,通常类似 git add等命令都是与index 暂存区的交互,git commit指令则是 index 与版本库的交 ...

  4. Git详细教程---多人协作开发

    Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非 ...

  5. Git详细教程(3)---结合gitHub使用

    1.GitHub的基本使用 GitHub就是一个网站,本身是基于Git,可以完成版本控制,可以托管代码. 英文版的. 在使用GitHub之前,首先需要注册一个账号. 登录,就可以完成相关的一些操作. ...

  6. Git详细教程(2)---多人协作开发

    Git可以完成两件事情: 1. 版本控制 2.多人协作开发 如今的项目,规模越来越大,功能越来越多,需要有一个团队进行开发. 如果有多个开发人员共同开发一个项目,如何进行协作的呢. Git提供了一个非 ...

  7. Git使用详细教程(3):git add, git commit详解

    在使用git之前,我们首先要初始化一个git管理的仓库,这里以博客(blog)为例 git init blog 我们进入目录,执行git status查看git状态,可以看到一个新的git管理的项目目 ...

  8. Git使用教程 Windows使用Git全攻略

    在Windows上安装Git 我们需要先把Git的安装包下载下来,访问网址:https://git-for-windows.github.io/ 或者百度网盘:链接: https://pan.baid ...

  9. git使用教程之了解git

    1.理解git快照 快照的作用就相当于将旧文件所占的空间保留下来,并且保存一个引用,而新文件中会继续使用与旧文件内容相同部分的磁盘空间,不同部分则写入新的磁盘空间.git有一个HEAD指针,这个指针可 ...

随机推荐

  1. 【原】Java学习笔记028 - 集合

    package cn.temptation; import java.util.HashSet; import java.util.Set; public class Sample01 { publi ...

  2. Spring Security验证流程剖析及自定义验证方法

    Spring Security的本质 Spring Security本质上是一连串的Filter, 然后又以一个独立的Filter的形式插入到Filter Chain里,其名为FilterChainP ...

  3. SVN的安装以及和eclipse的结合使用

    SVN概述 l 通常软件开发由多人协作开发,如果对代码文件.配置文件.文档等没有进行版本控制,将会出现很多问题: l 备份多个版本,占用磁盘空间大 l 解决代码冲突困难 l 容易引发BUG l 难于追 ...

  4. 【网络流24题22】最长k可重线段集问题

    题面戳我 sol 千万!千万!不要理解错题意了!最长K可重,不是说线段最多K可重!你以为计算几何? 原文:使得在\(x\)轴上的任何一点\(p\),\(S\)中与直线\(x=p\)相交的开线段个数不超 ...

  5. 《阿里巴巴Android编码规范》阅读纪要(一)

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 2月28日阿里巴巴首次公开内部安卓编码规范,试想那么多业务线,开发人员,没有一套规范管理起来是多么麻烦,以下是个人阅读Android基本组件部分过程 ...

  6. android使用JSON数据和服务器进行交互

    //点击按钮发送反馈信息给服务端,成功则进入优惠券界面 Button upload = (Button) findViewById(R.id.upload); final String finalLa ...

  7. 8086的分段寻址技术学习总结(Segmented Addressing)

    计算机最小粒度的数据单位是bit,但是为每个bit都分配地址不仅浪费资源,同时存取效率低.因此转而用8bits(也就是1个字节,1byte)来占用一个地址. 那么16位的地址线能够访问的地址空间大小为 ...

  8. iOS 神秘而又强大的传感器系统 (附demo)

    iOS中的各种传感器: 随着科技的发展,机器感知人的行为!Goole的无人驾驶汽车到李彦宏的无人驾汽车,都带入了各种计算及传感. 为了研究自然现象和制造劳动工具,人类必须了解外界的各类信息.了解外界信 ...

  9. 基于python语言的签名算法

    在wiki上看完接口文档根据传入的参数来查看返回的测试结果,测试结果提示缺少参数,找开发小伙伴沟通,原来发现缺少公共参数.找开发拿到公共参数的接口文档,发现里面传入的参数包含时间戳和签名. 时间戳:姑 ...

  10. memcached源码剖析——流程图

    参考: http://blog.csdn.net/column/details/memcached-src.html http://calixwu.com/2014/11/memcached-yuan ...