15.Git版本控制系统

Git

1.Devops

1)简介

​ DevOps 是一个完整的面向IT运维的工作流,以 IT 自动化以及持续集成(CI)、持续部署(CD)为基础,来优化程式开发、测试、系统运维等所有环节。

2)概念

​ DevOps一词的来自于Development(开发)和Operations(运维)的组合,突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠

3)作用

​ 提高产品质量

​ 1 自动化测试

​ 2 持续集成

​ 3 代码质量管理工具

​ 4 程序员鼓励师

2.Git版本控制系统

1)简介

​ 版本控制系统是一种记录一个或若干个文件内容变化,以便将来查阅特定版本内容情况的系统

​ 记录文件的所有历史变化

​ 随时可恢复到任何一个历史状态

​ 多人协作开发

2)常见版本管理工具

​ (1)SVN

​ 集中式的版本控制系统,只有一个中央数据仓库,如果中央数据仓库挂了或者不可访问(没网),所有的使用者无法使用SVN,无 法进行提交或备份文件。

​ (2)Git

​ 分布式的版本控制系统,在每个使用者电脑上就有一个完整的数据仓库,没有网络依旧可以使用Git。为了习惯及团队操作,会将本地数据同步到Git服务器或者GitHub等公开代码仓库。

3.Git安装

1)系统环境准备

​ (1)查看系统版本信息

​ [root@sc ~]# cat /etc/redhat-release

​ CentOS Linux release 7.8.2003 (Core) #CentOS 7

​ (2)查看内核信息

​ [root@sc ~]# uname -r

​ 3.10.0-1127.el7.x86_64 #CentOS 7是3.10.0版本,CentOS 6是2.6.32版本

​ (3)确认Selinux为关闭状态

​ 1.查看当前Selinux状态:[root@sc ~]# getenforce

​ 2.若为开启状态,需要关闭Selinux

​ [root@sc ~]# setenforce 0 #暂时关闭

​ 永久关闭,防止开机自启:

​ 可以编辑vim /etc/selinux/config 更改 SELINUX=disabled 保存退出

​ 或直接替换文件第7行:sed -i '7c SELINUX=disabled' /etc/selinux/config

​ (4)关闭防火墙服务 CentOS 7防火墙服务firewalld CentOS 6防火墙服务iptables

​ 1.查看当前firewalld状态:systemctl status firewalld

​ 2.关闭firewalld:

​ systemctl stop firewalld #暂时关闭

​ systemctl disable firewalld #禁止开机启动

2)安装git

​ (1)查看当前的git版本 #系统默认有git,如果没有下载yum install git

​ [root@sc ~]# git --version
​ git version 1.8.3.1

3)配置git使用用户信息 #提交代码显示自己信息,得知道是谁提交的

​ (1)查看当前的配置

​ [root@oldboyedu ~]# git config --list

​ 或 [root@oldboyedu ~]# cat .gitconfig

​ (2)配置使用用户信息

​ 1.git config #命令用法

​ 使用全局配置文件: git config --global

​ 使用系统级配置文件: git config --system

​ 使用版本库配置文件:git config --local #针对仓库

​ 2.我们使用全局配置,都用自己信息:

​ git config --global user.name'jiayinghe’ #配置自己名字

​ git config --global user.email‘yinghelail@163.com’ #配置自己邮箱

​ git config --global color.ui true #配置语法高亮

​ 可以编辑隐藏文件.gitconfig进行修改。

4.初始化目录为git仓库 git init

1)初始化工作目录、或者对已存在的目录都可进行初始化

​ 创建git_data目录:

​ [root@oldboyedu ~]# mkdir git_data

​ 到git_data下初始化目录:

​ [root@oldboyedu ~]# cd git_data/

​ [root@oldboyedu git_data]# git init # 初始化目录

​ Reinitialized existing Git repository in /root/git_data/.git/

​ 重新初始化 现有的 git 仓库 在隐藏文件.git

2)隐藏文件.git介绍

​ branches # 分支目录

​ config # 定义项目特有的配置选项

​ description # 仅供git web程序使用

​ HEAD # 指示当前的分支 ,相当于快照,指向哪个版本就恢复到哪个版本

​ hooks # 包含git钩子文件

​ info # 包含一个全局排除文件(exclude文件)

​ objects # 存放所有数据内容(哈希字串,里面代码但不到,只能通过下载能看)有info和pack两个子文件夹

​ refs # 存放指向数据(分支)的提交对象的指针

​ index # 保存暂存区信息,在执行git init的时候,这个文件还没有

5.Git常规使用

1)创建数据-提交数据

​ (1)git目录主要分三个目录:

​ 工作目录:(当前目录)

​ 暂存区域:(index)可以临时储存工作目录提交的数据

​ 本地仓库:(objects)

​ (2)提交数据步骤:

​ 1.首先在工作目录创建数据文件:例如1.txt

​ 2.把数据文件1.txt提交到暂存区域

​ 3.把暂存区域的数据提交到本地仓库,到这里数据文件算是备份完成

6.git基础命令

​ 1)git init #初始化仓库

​ 2)git status # 查看当前仓库的状态 ,保持目前仓库是干净的(没有新文件 没有修改的状态),会经常使用,操作一次用一次

​ 3)git add file # 提交工作目录文件到暂存区

​ 4)git add . 或* #添加目录中所有改动过的文件到暂存区

​ 5)git checkout -- file # 让暂存区的内容覆盖工作目录的文件

​ 6)git rm --cached file # 删除暂存区的内容

​ 7)git rm file # 删除工作目录的文件

​ 8)git rm -f file # 同时删除工作区和暂存区的文件

​ 9)git commit -m "对提交文件做一个描述"#提交暂存区文件到本地仓库,同时做个描述(m:message信息)

​ 10)git diff #比对工作区和暂存区的内容

​ 11)git diff --cached # 比对暂存区和本地仓库的内容

7.git命令的增、删、改、查

1)增 #把文件提交到本地仓库

​ [root@sc git_data]# touch 2.txt #工作目录创建文件

​ [root@sc git_data]# git add . #将2.txt提交到缓存区

​ [root@sc git_data]# git commit -m "create 2.txt" #将文件提交到本地仓库

2)删除文件 #只要对被管理的文件进行操作后 都必须得git add git commit 提交 才能生效

​ [root@sc git_data]# git rm 2.txt #删除工作目录文件 ll查看工作目录已经没有文件

​ [root@sc git_data]# git status #查看当前仓库状态,发现仓库并不干净,删除操作有问题

​ # On branch master

​ # Changes to be committed:

​ # (use "git reset HEAD ..." to unstage) #根据提示可以找回被删除的文件

​ # deleted: 1.txt

​ 解决问题:需要重新提交文件到本地仓库备份,才真正删除工作目录文件

​ [root@sc git_data]# git add .

​ [root@sc git_data]# git commit -m "delect 1.txt"

​ [root@sc git_data]# git status #再查看当前仓库状态,变干净了

3)改文件(内容或名字)#与删除文件一样,也需要git add git commit 提交 才能生效

​ [root@sc git_data]# git mv 2.txt 3.txt #改名

​ [root@sc git_data]# git status #查看当前仓库状态,发现仓库并不干净,改名操作有问题

​ [root@sc git_data]# git add .

​ [root@sc git_data]# git commit -m "delect 1.txt"

4)查文件

​ (1)git diff #比对工作区和暂存区的内容

​ [root@sc git_data]# echo 222 >> 3.txt #对工作目录下文件修改

​ [root@sc git_data]# git diff #比对工作区和暂存区的内容,前提缓存区中已经有文件

​ diff --git a/3.txt b/3.txt

​ index 58c9bdf..a30a52a 100644

​ --- a/3.txt

​ +++ b/3.txt

​ @@ -1 +1,2 @@

​ 111

​ +222 #增加了222

​ (2)git diff --cached # 比对暂存区和本地仓库的内容

​ [root@sc git_data]# git add . #先将文件提交到缓存区

​ [root@sc git_data]# git diff --cached #比对暂存区和本地仓库的内容

8.恢复历史数据

1)查看历史的git commit快照操作(查看本地仓库历史数据)

​ git log #显示所有数据详细信息

​ git log -2 #只显示前2条信息(下面俩命令同样适用)

​ git log ‐‐oneline # 一行简单的显示commit信息

​ git log ‐p # 显示具体内容的变化

2)恢复历史数据

​ (1)只更改了当前共工作目录文件,可从暂存区把文件找回

​ [root@sc git_data]# echo 333 >> 3.txt #修改当前目录文件

​ [root@sc git_data]# git status #查看当前状态,有可撤回文件提示

​ [root@sc git_data]# git checkout -- 3.txt #把暂存区文件覆盖本地工作目录

​ (2)修改了本地目录且同时提交到了暂存区,可从本地仓库一步一步找回

​ [root@sc git_data]# echo 333 >> 3.txt #修改当前目录文件

​ [root@sc git_data]# git add * #把修改过的文件提交到暂存区

​ [root@sc git_data]# status #查看当前状态,有可撤回文件提示

​ [root@sc git_data]# git reset HEAD 3.txt #把本地仓库文件夹覆盖暂存区域

​ [root@sc git_data]# status #查看当前状态,有可撤回文件提示

​ [root@sc git_data]# git checkout -- 3.txt #把暂存区文件覆盖本地工作目录

​ (3)修改了工作目录后提交到了暂存区和本地仓库后进行数据恢复(数据进行了快照)

​ [root@sc git_data]# echo 333 >> 3.txt #修改当前目录文件

​ [root@sc git_data]# git add * #把修改过的文件提交到暂存区

​ [root@sc git_data]# git commit -m "文件3.txt增加了333" #把文件提交到本地仓库

​ [root@sc git_data]# echo 444 >> 3.txt #再次修改当前目录文件

​ [root@sc git_data]# git add * #把修改过的文件提交到暂存区

​ [root@sc git_data]# git commit -m "文件3.txt增加了444" #把文件提交到本地仓库

突然发现第二次文件修改错了,想要退回到第一次修改的文件
办法:更改HEAD的版本指针到上一个版本 #默认的HEAD版本指针会指向到最近的一次提交版本记录

​ 1.首先查看历史版本信息:

​ [root@sc git_data]# git log --oneline

​ ef8eecd 文件3.txt增加了444 #当前指针位置

​ 8870abe 文件3.txt增加了333 #8870abe哈希字串,每次提交都要唯一的哈希字串

​ f24717e 追加内容

​ [root@sc git_data]# git log --oneline --decorate #可查看当前HEAD指针位置在哪

​ 8870abe (HEAD, testing, master) 文件3.txt增加了333

​ 2.将指针指向我们想要恢复的版本(增加了333),直接将文件恢复到工作目录

​ [root@sc git_data]# git reset --hard f24717e #恢复数据(手误恢复了错误数据)

​ [root@sc git_data]# cat 3.txt #打开文件发现回退错了,应该回退到333版本

​ 111

​ 222

​ [root@sc git_data]# git log --oneline #这时再次查看历史版本信息,发现没有333版本了

原因很简单,因为我们当前的工作版本是历史的一个提交点,这个历史提交点还没有发生过333 444 更新记录,所 以当然就看不到了,要是想”还原到未来”的历史更新点,可以用git reflog命令来查看所有的历史记录(reset重置复位与commit提交的数据)

​ [root@sc git_data]# git reflog #查看所有的历史记录

​ f24717e HEAD@{0}: reset: moving to f24717e

​ ef8eecd HEAD@{2}: commit: 文件3.txt增加了444

​ 8870abe HEAD@{3}: commit: 文件3.txt增加了333

​ [root@sc git_data]# git reset --hard 8870abe #恢复333版本数据

​ [root@sc git_data]# cat 3.txt #查看正确

9.创建新的分支

1)为什么要创建新分支

​ 一般在实际的项目开发中,我们要尽量保证master主分支是非常稳定的,仅用于发布新版本,平时不要随便直接修改里面的数据文件,而工作的时候则可以新建不同的工作分支,等到工作完成后在合并到master朱分支上面。

2)创建新分支

​ [root@git git_data]# git branch testing # 新建testing分支

​ [root@git git_data]# git branch # 查看所有分支,*号在哪里就说明当前在哪个分支上

3)切换分支

​ [root@git git_data]# git checkout testing # 切换到testing分支

​ [root@git git_data]# git branch #当前*在testing上

​ [root@git git_data]# git checkout -b dev #创建并切换到dev分支

4)删除分支:-d

​ [root@git git_data]# git branch ‐d testing #删除分支 -d 参数指定分支

10.分支合并到主分支

​ [root@git git_data]# git merge testing #在主分支选择要合并的分支,合并之后删除分支

​ 合并冲突:俩开发提交同一个文件,修改的内容在同一行不一样时,发生合并冲突

​ 办法:手动编辑文件(冲突的文件自动标识到文件里),保留想要的内容,然后重新提交

​ git commit ‐am "merge testing to master"

11.git标签使用

1)作用:给数据文件做标签,恢复历史数据的时候,不需要加唯一字符串(不好记),只需要指定标签名就可以完成操作
2)添加标签格式:

​ git tag ‐a v1.0 ‐m " version v1.0“ # -a指定标签名称,-m文字说明,给当前指针指向文件做标签

​ git tag -a v1.1 a9e24ab -m "v1.1" # 指定某个版本打标签(哈希值方式指定)

3)查看标签

​ [root@git git_data]# git tag #查看所有标签

​ v1.0

​ v2.0

​ [root@git git_data]# git show v1.0 # 查看标签v1.0的信息

4)还原历史数据

​ [root@git git_data]# git reset ‐‐hard v2.0 # 直接还原数据到v2.0 版本

5)删除标签:-d

​ [root@git git_data]# git tag ‐d v2.0 # 删除标签 ‐d参数 指定标签

原文地址:https://www.cnblogs.com/jia-shu/p/13987000.html