GIT概述、命令操作

这里写目录标题

    • 01.GIT概述
    • 02.GIT相关概念
      • 03.GIT下载与安装
        • 04.GIT本地操作-初始化工作区
        • 05.GIT本地操作-add与commit
        • 06.GIT本地操作
          • 小结
        • 07.GIT本地操作-版本回退
        • 08.GIT本地操作-修改撤消
          • 小结
        • 09.GIT本地操作-总结
        • 10.分支地操作-分支介绍
          • 目标
          • 内容
        • 11.分支地操作-分支创建与切换
          • 目标
          • 内容
          • 小结
        • 12.分支地操作-分支合并与删除
          • 目标
          • 内容
          • 小结
        • 13.GIT远程仓库介绍与码云仓库注册创建
          • 目标
          • 内容
          • 小结
        • 14.GIT远程仓库操作-关联、拉取、推送、克隆
          • 目标
          • 内容
          • 小结

01.GIT概述

  • List item List itemGit是目前世界上最先进的分布式文件版本控制系统(没有之一)

  • List item版本控制 所谓的版本控制就是将一组文件的改动记录下来,形成版本历史,以便需要时恢复

  • GIT作用

  • 代码共享

  • 每位开发者可以使用Git将自己的代码上传到云服务器上,同时使用Git还可以将其他人上传的代码下载到自己的电脑上,这样就实现了代码共享

  • GIT概述、命令操作_第1张图片

  • 回溯版本

  • 在开发的过程中其实还会越到各种奇葩问题,比如自己心血来潮写了一段超级牛×的代码,本着闲着也是闲着的思想,在这段代码的基础上又进行了调优,但是优没调成,代码还给整的不能用了。鉴于马上要要交活了,这个时候就打算放弃,但是你发现原来能用的代码已经被改的面目全非,不能用了,那这就太让人崩溃了。这个时候就幻想着如果这两小时什么事情都没有发生该多好,如果能时间倒流该多好。Git告诉你,这事我能做。Git除了可以帮我们保存代码,还可以保存每次上传的痕迹,每上传一次就做一次备份,上传3次就备份3次,每次备份就相当于一个版本,任意时间可以通过Git查询曾经提交过的每一个版本对应的内容,这样就可以随时恢复到之前任意上传时间对应的状态了

  • 在这里插入图片描述

  • 追踪信息

  • 使用Git的过程中大部分时间是管理自己写的东西,但是也会存在一些情况需要你去改别人的代码或者几个人编辑同一个文件。此时同一个文件,你改改,我改改,最后算谁的啊?出了问题你追责都没的追,怎么解决这个问题呢?Git提供了强制记录日志的功能,每次上传信息要求书写日志,可以记录本次上传的相关信息。比如写清楚本次上传的内容啊,对应的说明啊,等等。关于日志的内容书写格式并不是规范类的东西,只能算是一个约定,因此每个公司对开发者提交日志都有自己的要求,上传时写什么东西,这样出了问题就可以进行信息追踪了

  • GIT概述、命令操作_第2张图片

  • GIT与SVN的区别【面试题】

  • Git 是分布式的,SVN 不是

  • Git 把内容按元数据方式存储,而 SVN 是按文件

  • Git 分支和 SVN 的分支不同

  • Git 没有一个全局的版本号,而 SVN 有

  • Git 的内容完整性要优于 SVN

  • GIT概述、命令操作_第3张图片

02.GIT相关概念

  • git没有中央版本库,但是为了方便开发小组的成员们进行代码共享,我们通常会搭建一个远程的git仓库。和svn不同的是开发者本地也包含一个完成的git仓库,从某种程度上来说本地的仓库和远程的仓库在身份上是等价的,没有主从。
    工作区:就是你在电脑里能看到的目录。

  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index

  • 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库

  • GIT概述、命令操作_第4张图片

03.GIT下载与安装

GIT安装完成,并测试成功

GIT概述、命令操作_第5张图片

  • 安装过程非常简单,各种下一步,各种Next,点点点就完事了

  • 双击直接安装【版本为64位系统的】

  • 点击Finish完成安装,验证安装,找一个桌面空白处,右键出现下列窗口
    GIT概述、命令操作_第6张图片

点击后,出现Git的控制台,在控制台输入git,可以看到相关的帮助信息

GIT概述、命令操作_第7张图片

04.GIT本地操作-初始化工作区

先建个文件夹 任意起名 任意位置 进去 右键 选 GIT BASH HERE

  • 初始化工作区

    • 工作区 就是你在电脑里能看到的目录。比如我们刚刚创建的learn-Git目录,在最初使用的时候,我们需要初始化当前的文件夹为工作区

    • 如何初始化工作区
      GIT概述、命令操作_第8张图片

      命令: git init        #初始化
      

GIT概述、命令操作_第9张图片

在文件夹中机会出现一个隐藏文件.git如图

GIT概述、命令操作_第10张图片

当我们在learn-Git文件夹中添加文件的时候,那么这个文件就会被Git所管理
  • 查看状态

    我们在learn-git目录中创建一个readme.txt文件,可以通过命令来查看它的状态

    命令:git status    #查看状态
    

GIT概述、命令操作_第11张图片

红色代表当前没有提交到缓存区

05.GIT本地操作-add与commit

  • 工作区提交缓存区

    在git控制台中使用 命令

    命令:git add readme.txt 
    

在这里插入图片描述

这是完成了将文件由工作区提交暂存区

我们通过git status来查看状态
GIT概述、命令操作_第12张图片

发现这时文件变成绿色,可以提交到本地仓库

  • 缓存区提交本地仓库

    命令:git commit -m '第一次提交' 
    说明:-m 后面跟随的是为你提交的备注
    

GIT概述、命令操作_第13张图片

注意:如果第一次提交需要填写如下内容:

命令:git config --global user.email '[email protected]'
说明:指定邮箱
命令:git config --global user.name 'Shuwq'
说明:指定操作者

扩展:

添加多个文件  git add [file1] [file2] ...
添加指定目录到暂存区,包括子目录  git add [dir]
添加当前目录下的所有文件到暂存区  git add .

add 时,一个个文件加比较麻烦,可以用下面的命令将所有变动同步至暂存区(新增、修改、删除)
git add -A
下面的命令是将所有修改和删除同步至暂存区,不包括新增
git add -u

06.GIT本地操作

使用vi命令,对readme.txt文件进行编辑,添加我是第二行代码,使用wq退出

#第1步
vi  readme.txt

#第2步:按下键盘i键,进入到编辑模式

#第3步:编辑结束后,按照键盘esc,回到命令模式

#第4步:按下键盘:键,进入到底行模式

#第5步:输入wq  (保存并退出)

GIT概述、命令操作_第14张图片

  • 工作区、暂存区比较

    命令: git diff readme.txt
    

GIT概述、命令操作_第15张图片

  • 工作区、本地库比较

    命令: git diff HEAD readme.txt
    # HEAD代表本地库
    

GIT概述、命令操作_第16张图片

  • 暂存区、本地库比较

    命令:git diff --cached readme.txt
    

GIT概述、命令操作_第17张图片

这里缓存区和本地库没有不同所以没有内容

小结
  • 工作区与暂存区如何比较

    git diff 文件名

  • 工作区与本地库如何比较

    git diff HEAD 文件名

  • 暂存区与本地库如何比较

    git diff --cached 文件名

GIT概述、命令操作_第18张图片

07.GIT本地操作-版本回退

  • 当我们从暂存区提交到本地仓库时,发现当前的提交的版本有问题,希望回退到指定版本如何操作呢?

在这里插入图片描述

使用vi命令编辑readme.txt,添加“我是第三行代码”

GIT概述、命令操作_第19张图片

命令:git add readme.txt   #提交到暂存区

在这里插入图片描述

命令:git commit -m '第三次提交'   #提交到本地仓库

我们可以通过git提供的查看日志命令来查看提交的日志

命令:git log     #查看当前提交日志

GIT概述、命令操作_第20张图片

可以发现,目前为止,我们已经在本地仓库中提交了3次,也就是说有3个不同版本。其中,最近的这个版本有一个标示:HEAD-> master 这就是标记当前分支的当前版本所在位置,如果没有显示当前所在位置可以使用下面命令查看:

命令:git log --decorate  查看当前提交日志,且显示当前分支的当前版本所在位置

在log中,每一个版本的前面,都有一长串随即数字: b44a10787c2b2bcc7ceb9c39cf06309065518d4b ,这是每次提交的commit id ,这是通过SHA1算法得到的值,Git通过这个唯一的id来区分每次提交

  • 回退到之前版本

    命令:git reset --hard HEAD^ 
    
    回归到上一个版本,Git通过HEAD来判断当前所在的版本位置。那么上一个版本,就用HEAD^标示,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。 
    

在这里插入图片描述

这时我们可以在查看一下日志 git log
GIT概述、命令操作_第21张图片

发现只有两个版本,我们在查看一下文件内容

GIT概述、命令操作_第22张图片

  • 回退到指定版本

    首先们使用

    命令: git reflog    #查看所有操作
    

GIT概述、命令操作_第23张图片

找到之后可以使用如下命令进行回退到指定版本

命令:git reset --hard  版本号    #回退到指定版本

我们回到到第三次提交,这时我们在查看文件

在这里插入图片描述

  • 如何查看当前日志 (查看代码提交的日志信息)

    git log

  • 如何回退到上一个版本

    git reset —hard Head^

  • 如何查看所有操作日志 (查看git的操作日志【每一次的操作都会被记录到日志文件中】)

    git reflog

  • 如何回退到指定版本 (通过操作日志中记录的版本号,回退到指定的版本上)

    git reset --hard 版本号

总结:

  • git作用:

    • 对开发中的代码进行版本控制
  • git工作模型

    • 工作区
      • 面向开发人员使用的
    • 暂存区
      • 相当于缓存(暂时存放开发人员添加的代码文件)
      • 放在暂存区的代码文件,可以作为一个整体一次性提交到本地库
    • 本地库
      • 本地的代码库(每个开发人员都有自己的本地库)
    • 远程代码库
      • 把本地库中的代码同步到远程服务器上
      • 作用:
        • 备份
        • 共享代码
          • A同步到远程代码库上的文件, B可以下载使用
  • git本地操作命令:

    • 初始化工作区

      • git init
        
    • 把工作区中的文件,添加到暂存区

      • git add  文件或目录
        
    • 把暂存区中的文件,提交到本地仓库

      • git commit -m "备注"
        
    • 对文件代码的差异化比较

      • #工作区 VS 暂存区
        git diff 文件名
        
        #工作区 VS  本地库 
        git diff HEAD 文件名
        
        #暂存区 VS 本地区
        git diff --cached 文件名
        
    • 版本回退

      • #回退到上一个版本
        git reset --hard HEAD^
        
    • 查看git操作日志文件

      • git reflog 
        
    • 回退到指定的版本上

      • git reset -- hard 版本号   #版本号可以通过git reflog查看
        

08.GIT本地操作-修改撤消

当我们工作区内容想要提交到缓存区时【add】,突然发现有问题,想要撤销该如何处理?

当我们已提交到缓存区的内容,发现出现了bug,这时又应该如何处理哪?

以上操作我们可以使用GIT提供的撤销命令来完成

  • 工作区撤销修改

    编辑readme.txt添加“我是第四行”

GIT概述、命令操作_第24张图片

在你提交缓存区前,你突然发现这个修改是有问题的,你打算恢复到原来的样子。怎么办?

使用git status 命令查看当前状态

命令:git checkout 文件名称    #撤销工作区修改

GIT概述、命令操作_第25张图片

我们撤销后,在查看文件中内容,发现工作区内容已经撤销,并查看状态,发现状态很干净

  • 暂存区撤销修改

    使用 vi 命令 编辑readme.txt添加“我是第五行”
    GIT概述、命令操作_第26张图片
    GIT概述、命令操作_第27张图片

    使用git add提交文件至暂存区
    在这里插入图片描述

    撤销暂存区

    命令:git reset HEAD readme.txt    #撤销暂存区
    

GIT概述、命令操作_第28张图片

工作区撤销 git checkout
GIT概述、命令操作_第29张图片

我们在查看文件,发现已经恢复到最初始样子

小结
  • 如何实现工作区撤销修改

    git checkout 文件名

  • 如何将缓存区内容撤销到工作区

    git reset head 文件名

09.GIT本地操作-总结

  • 初始化工作区 git init
  • 查看状态 git status
  • 提交
    • 工作区提交暂存区 git add
    • 暂存区提交本地库 git commit -m “备注”
  • 差异比较
    • 工作区和缓存区比较 git diff 文件名
    • 工作区和本地库比较 git diff head 文件名
    • 缓存区与本地库比较 git diff --cached 文件名
  • 版本回退
    • 查看日志 git log
    • 回退到上一个版本 git reset --hard head^ / git reset --hard head~数值
    • 查看所有操作日志 git reflog #查看版本号
    • 回退到指定版本 git reset --hard 版本号
  • 修改撤消
    • 工作区撤消 git checkout 文件名
    • 缓存区撤消到工作区 git reset head 文件名

10.分支地操作-分支介绍

目标

​ 能说分支作用

内容

我们现在使用Git可以简单理解为阶段性的使用Git保存一下自己写的代码,每次提交形成一个版本信息。但是你能想象出当一个团队所有人提交的版本信息汇集到一起后是什么样子吗?那版本的数量是数以千计的。尽管Git提供了一系列的操作帮助我们完成版本的操作,但是最终架不住版本太多看着乱啊。

比如说张三是一个成熟的开发者,他做完一个模块提交一个版本,李四是一个入行一年的开发者,他做完一个功能提交一个版本,这都是可以接受的,你要碰到王五这种刚刚入行的,他恨不得一个文件提交一个版本,甚至写一个方法就提交一个版本,那Git中管理的版本真的就要数以万计了。

其实理想的情况应该是这样的,张三开发功能A,在A没有完全制作完成之前不要提交版本,等做完了再一次性提交所有的文件。这样每一个版本都是具有非常高的价值的,不会出现大量无效的提交。什么叫无效提交?你一个模块8个类配合在一起工作,你写完一个类提交一个版本,回头不管是回滚也好,对版本进行管理也好,单独一个类自己不能构成一个完整的开发状态,你回滚到这个版本你发现不能用,再换一个还是缺文件,这就让人很崩溃了。

但是作为开发者来说,我打版本也是为了自己用的方便,我写点备份一点,看上去也很合理。这个时候就提出了一个新的需求,能不能我自己提交自己专用的版本,而不要和项目组的核心代码掺和在一起呢?这个功能必须有,这就是下面要说的分支。

那么在说分支前,我们说一下之前的提交到底是什么?

提交的本质:记录仓库中一组文件的变化信息(增、删、改)

分支是什么?

分支就是多次提交串起来的一条线

GIT概述、命令操作_第30张图片

场景:问题背景:要开发一个新功能,又不想打扰目前分支(main)的功能开发,于是
GIT概述、命令操作_第31张图片

可以看到 main 分支的开发并不会停止,可以继续进行 c4 这个功能的开发,而 new 分支可以开发新功能 c5,同样不会影响 main

等 new 分支的功能开发测试没有问题了,main 也想要 new 的代码怎么办?
GIT概述、命令操作_第32张图片

可以使用 merge 命令将 new 分支的变动合并至 main 分支,此时的 c6 中既包含了 c4 以来的修改,也包括了 c5 的修改,这时如果觉得 c5 已经没用了,可以将它删除

我们分支讲解主要包含

  • 创建分支
  • 切换分支
  • 合并分支
  • 查看分支
  • 删除分支

11.分支地操作-分支创建与切换

目标

​ 掌握分支创建与切换

内容
  • 创建分支

    分支创建示意图:
    GIT概述、命令操作_第33张图片

    命令: git branch 分支名字
    例如  git branch dev      #创建dev分支
    

在这里插入图片描述

  • 分支切换

    命令: git checkout dev    #切换dev分支
    
    

GIT概述、命令操作_第34张图片

编辑readme.txt,添加“我是dev提交的代码”

GIT概述、命令操作_第35张图片

从工作区提交到缓存区执行:git add readme.txt
执行:git commit -m ‘dev分支提交’
GIT概述、命令操作_第36张图片

查看文件内容
GIT概述、命令操作_第37张图片

切换到master分支,并查看文件内容

GIT概述、命令操作_第38张图片

小结
  • 如何创建分支 git branch 分支名
  • 何切换分支 git checkout 分支名

12.分支地操作-分支合并与删除

目标

​ 掌握分支合并与删除

内容

上一个示例中,我们已经创建了dev分支,并在分支上添加了内容,如果想要将dev分支内容合并到master上如何操作

  • 分支合并

    命令: git merge dev   #合并dev分支
    

GIT概述、命令操作_第39张图片

注意:当前我们是在master分支

合并后,我们发现master分支上的readme.txt文件内容已经改变

  • 分支删除

    合并完分支之后,如果不再使用dev分支,则可以删除此分支,先查看当前分支:

    命令 git branch   #查看分支情况
    

在这里插入图片描述

当有前两个分支dev与master,我们当前是在master分支上,如何删除dev分支

命令 git branch -d 分支名

在这里插入图片描述

我们使用git branch查看,发现dev分支已经被删除

小结
  • 如何合并分支 git merge 分支名
    • 1、先切换到某个分支上 (使用这个分支)
    • 2、使用命令:git merge 分支名 #合并到当前使用的分支
  • 如何查看分支 git branch #可以所有的分支名称
  • 如何删除分支 git branch -d 分支名 #删除指定的分支

分支总结:

  • 要使用分支:
    • 1、创建分支
    • 2、切换到所创建的分支
      • 后缀提交的代码到新分支上
    • 3、分支上的代码开发结束之后,把分支合并到主分支上
    • 4、无用分支进行删除

13.GIT远程仓库介绍与码云仓库注册创建

目标

​ 能说出常用的GIT远程仓库,并完成码云仓库的注册创建

内容

本地仓库实际上是存储在个人电脑中的,用于存储个人提交记录与提交日志,说简单点,你现在commit提交的内容都在本地

远程仓库是公网或外网中的一个仓库,主要用于存储个人或团队的提交记录与提交日志,团队合作开发也是靠远程仓库实现的。大家都把东西提交到同一个远程仓库里面就OK了,这样每个人都可以获取到团队内开发的所有内容了。目前市面上常用的git支持的远程仓库有如下三个

常用的远程仓库

  • GitHub(https://github.com)
  • gitee https://gitee.com
  • gitlib(https://about.gitlab.com)

GIT概述、命令操作_第40张图片

GitHub是一个面向开源及私有软件项目的托管平台,说白了就是给开发者提供了一个远程仓库。当然人家提供的功能还是很强大的,2018年微软以75亿美金收购了GitHub。现在的GitHub除了承载了代码托管平台的功能,更大的功能是组建了一个同性交流平台,大量的码农在上面做技术及非技术的交流,活跃用户还是很多的,可惜这个主站在国外,速度一般。

gitee和GitHub是一样的东西,是开源中国(OSChina)推出的基于Git的代码托管平台,又叫码云。有什么特点呢?有,还很硬的特点,主站在中国,是否秒懂?速度快啊,中国码农的数量那不是一般的多。

GitHub和gitee都是开源的代码托管平台,这里就有一个BUG了,如果我现在做的项目涉密性很强怎么办?放公网上?不现实啊,你再提供高等级的安全服务我也不敢放啊,自己搭一个把,gitlib就有了。gitlib基于git作为版本控制工具的基础上,可以为你搭建一个Web服务器,你就可以理解为自己搭建了一个局域网内能够访问的服务器。啥用?私服啊,代码安全啊,别人访问不到啊,就这个用。

那我们如果玩远程仓库玩哪个?百分之百玩gitee啊,速度快,又免费,多好。

  • 注册登录

    访问地址:https://gitee.com/

GIT概述、命令操作_第41张图片

  • 创建仓库

GIT概述、命令操作_第42张图片

填写项目相关的信息

GIT概述、命令操作_第43张图片

仓库创建完毕,可以看到,如果我们要与远程仓库同步,这里支持多种通信协议,当我们选中一种协议后,后面会出现对应的远程仓库地址

GIT概述、命令操作_第44张图片

小结
  • git常用的远程仓库有哪些

    github gitee gitlib

    • github: 全球最大的开源代码托管平台(服务器在国外)
    • gitee:模仿github的中国的开源代码托管平台(服务器在中国)
    • 以上两个平台,可以设置公开的代码仓库、也可以设置私有的代码仓库
      • 安生性要求高的代码,不建议放在github、gitee
    • 在企业中,如果对代码安全性有要求,使用:gitlib(自己搭建局域网代码服务器)

14.GIT远程仓库操作-关联、拉取、推送、克隆

目标

​ 完成远程仓库的关联、拉取、推送、克隆操作

内容
  • 关联

    现在readme.txt已经推送到我们自己的本地仓库,在推送到码云仓库前,我们需要先建立与远程仓库的关系

    命令:git remote add origin 远程仓库地址        #关联远程仓库
    
    远程仓库地址:可以从github、gitee上获取    
                例:https://gitee.com/itheima-jackie/hello-git.git
    
    例如: git remote add origin https://gitee.com/itheima-jackie/hello-git.git
    

GIT概述、命令操作_第45张图片

  • 拉取

    【注意】在推送代码前必须先拉取代码,否则无法推送本地仓库代码到仓库

    • 意义:保证本地代码仓库和远程代码仓库内容一致
    命令:git pull origin master --allow-unrelated-histories
    首次拉取需要添加:--allow-unrelated-histories
    命令:git pull 后续拉取
    

GIT概述、命令操作_第46张图片

  • 推送(把本地库中的内容,同步到远程代码仓库)

    命令: git push -u origin master    #首次推送
    命令: git push   #后续推送
    

    码云仓库有推送的信息

GIT概述、命令操作_第47张图片

  • 克隆

    如果我们新加入一个团队,这个时候就需要我们把代码从远程仓库克隆过来,那么咱们操作呢?

    新建文件夹learn-Git-B,新建的文件中右键

GIT概述、命令操作_第48张图片

点击 Git bash Here

命令: git clone 远程仓库

GIT概述、命令操作_第49张图片

这时候就拉取出远程仓库的内容

GIT概述、命令操作_第50张图片

小结
#关联远程仓库
命令: git remote add origin 远程仓库

#从远程仓库拉取最新版本到本地
命令: git pull origin master --allow-unrelated-histories
首次拉取需要添加:--allow-unrelated-histories
命令: git pull 后续拉取

#推送到远程仓库
命令: git push -u origin master 首次推送
命令: git push 后续推送

#从远程仓库克隆
命令: git clone 远程仓库




### 解释说明
# clone (克隆)
从远程服务器克隆一个一模一样的版本库到本地,复制的是整个版本库,叫做clone
clone是将一个库复制到你的本地,是一个本地从无到有的过程

# pull  (拉取)
从远程服务器获取到一个branch分支的更新(新版本)到本地,并更新本地库,叫做pull
pull是指把远程服务器中版本库内容更新的部分同步到本地库

 - [ ] 后续会发IDEA中使用GIT-集成GIT

你可能感兴趣的:(笔记,git)