【apollo之Git】

零、Git介绍和Git原理

【精】通俗原理
腾讯/Git内部类型
【精】git出的介绍原理的书
【精】git add + git commit + 分支创建 的原理1 原理2

在这里插入图片描述

一、Git简介

1.1两大特点

在这里插入图片描述在这里插入图片描述

1.2安装

$ sudo apt-get install git
///验证
$ git

1.3 创建一个本地空仓库

   在要被管理的目录下,创建一个空仓库,用来管理该目录

///初始化当前目录为仓库,初始化后会自动将当前仓库设置为master
git_init
///查看生成的git的配置文件
ls -ah 

  设置用户名和邮箱名

///安装完 Git 之后,要做的第一件事就是设置你的用户名和邮件地址。 
///这一点很重要,因为每一个 Git 提交都会使用这些信息,
///它们会写入到你的每一次提交中,不可更改:
git config --global user.name "名称"
git config --global user.email "邮箱号"

   将文件提交到本地仓库

git add xxx.c		///暂存操作。将文件添加到本地仓库的提交缓存
git commit -m "版本描述信息"	///提交操作。将文件提交到本地仓库
///git commit 会为我们生成40位的哈希值,用于作为id,
///并把刚刚用git add添加到提交缓存区里的文件提交到本地仓库中,
///便于我们回滚,至此,这个文件就已经添加到本地仓库中了,
///同时本地仓库也迭代了一个版本。

   版本回退

git reset --hard HEAD~n (n为回退多少版本)!

在这里插入图片描述
   从回退的版本前进

git reset --hard 版本号(git log 中打印出的commit,使用前八位即可。每个版本有个commit值,commit本质是sha256)

在这里插入图片描述
   查看操作记录

git reflog 

在这里插入图片描述

1.4工作区和暂存区

  Git object 类型:blob类型,tree类型,commit类型,tag类型
流程
   1)一个目录中有两个文件a.txt和b.txt。git init创建一个本地仓库之后,使用
  git add命令暂存所有文件
。如图1所示即为三个区的数据结构。
      暂存操作会为每一个文件计算校验和(使用 SHA-1 哈希算法),然后会把
   当前
      版本的文件快照保存到 Git 仓库中 (Git 使用 blob 对象来保存它们),最
   终将校验和加入到暂存区域等待提交。
     暂存区的索引和仓库区的快照为key-Value关系,根据暂存区的Key,即可
   找到Value,从而找到文件内容。

在这里插入图片描述

图1. 三个区中的数据结构



   2)在1)的基础上执行git commit -m “xxx”命令
    当使用 git commit 进行提交操作时,Git 会先计算每一个子目录(本例中只
  有项目根目录)的校验和, 然后在 Git 仓库中这些校验和保存为树对象。随
  后,Git 便会创建一个提交对象, 它除了包含上面提到的那些信息外,还包含指
  向这个树对象(项目根目录)的指针。 如此一来,Git 就可以在需要的时候重现
  此次保存的快照。Header也指向被提交的版本。三个区域中的数据结构变化如
  图2所示。
在这里插入图片描述

图2. 三个区中的数据结构


   3)在2)有已经提交了一个版本的基础上执行修改文件,并执行git add命令
    计算需要暂存文件的文件校验和,a.txt没有修改。SHA值未
  变,所以索引没变,只有b.txt的索引发生变化。三个区域中的数据结构变化如
  图3所示。
在这里插入图片描述

图3. 三个区中的数据结构


   4)在3)的基础上提交第二个版本
    做些修改后再次提交,那么这次产生的提交对象会包含一个指向上次提交对
  象(父对象)的指针。三个区域中的数据结构变化如
  图4所示。

在这里插入图片描述

图4. 三个区中的数据结构

1.5 Git 分支

  【精精精】文章介绍了分支管理在网站开发中的使用及其优势(为什么需要分支管理?)

1.5.1 常用命令

在这里插入图片描述

使用git log --pretty=oneline --graph ///查看图形化的版本

在这里插入图片描述

1.5.2 分支合并

  分支会有下面两种情况:
  1)如图5,分支版本所在提交是主版本所在提交的后继:合并分支时,会采用fast-forward模式,如图7.
  2)分支版本所在提交和主版本所在提交在更早的时候出现了分叉:
    (1)如图6,直接后继:采用fast-forward,如图8
    (2)如图6,分叉:如果你在两个不同的分支中,对同一个文件的同一个部分
    进行了不同的修改,Git 就没法干净的合并它们,产生合并冲突。如图9(a)
    和(b)。手动解决;冲突后方可提交。(如果在两个不同的分支中,不是对同一个文件进行修改的,对不同文件进行修改则不会产生冲突,不需要手动解决冲突)

在这里插入图片描述

图5. iss53版本是master版本的直接后继

在这里插入图片描述

图6. hotfix版本和iss53是master版本的直接后继;iss53与hotfix在C2版本产生分叉

在这里插入图片描述

图7. master与iss53fast-foward合并

在这里插入图片描述

图8. hotfix版本和master合并将采用fast-forward

在这里插入图片描述

图9(a). master 分支所在提交并不是 iss53 分支所在提交的直接祖先,Git 不得不做一些额外的工作。 出现这种情况的时候,Git 会使用两个分支的末端所指的快照(C4 和 C5)以及这两个分支的公共祖先(C2),做一个简单的三方合并。


在这里插入图片描述

图9(b). 分支情况下的合并。

1.5.3 分支管理

   禁用fast-forward模式,可以把保留分支的版本记录

///本次合并将会提交一个新的commit
git merge--no-ff -m 'commit描述'

在这里插入图片描述

图10(a). dev分支和master分支要合并。

![在这里插入图片描述](https://img-blog.csdnimg.cn/da5bfca6196946c39b96d2540103497b.png#pic_center =400x)
图10(b).fast-forwardf模式和并,HEAD和master指针直接指向dev分支当前版本,这样删除dev指针后(删除dev分支),git log就无法保留dev分支记录了。

在这里插入图片描述

图10©. 禁用fast-forwardf模式和并,dev和master、合并后会commit一版,HEAD和master指针会指向最新版,这样删除dev指针后(删除dev分支), git log就可以保留dev分支记录了。


在这里插入图片描述


1.5.4 Bug分支

在这里插入图片描述

在这里插入图片描述
手头工作未完成指的是:修改a.txt未完成,无法提交到暂存区。


1.5.5分支总结

在这里插入图片描述


二、github 远程仓库


在这里插入图片描述
在这里插入图片描述

2.1 创建仓库


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

2.1 添加SSH账号

为什么需要SSH密钥:
git远程链接一共可以使用四种协议,各有优缺点:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

git使用https协议,每次pull, push都要输入密码,相当的烦。
使用git协议,然后使用ssh密钥。这样可以省去每次都输密码。

2.2 克隆项目

git clone 代码项目ssh地址

2.3 推送本地分支

在这里插入图片描述

2.4 将本地分支跟踪服务器分支

在这里插入图片描述
使用 git status 查看本地分支与待跟踪服务器分支之间的区别

2.5 拉取远程分支代码

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值