前言
我们知道git是开发中比较常见的版本控制工具
我们可以先提出一个场景:
老板让你去修改方案
第一次修改 打回
第二次修改 打回
第n次修改 老板让你使用第一次的版本 阁下如何应对???
我对每个版本进行编号?? 是一种方案
但是这里也是有缺陷的 比如说在很多版本中找一个有特定功能的版本不好找
此时我们就可以使用git
git可以记录每个文本文件的新增 二进制大小的更新
命令
安装命令
sudo yum install -y git
初始化仓库
git init
新增配置项
git config user.name qqsbx git config user.email "1815798600" //注意这里的变量需要配置全局 不然只是这个仓库这里有用 所以我们加上--global git config --golbal user.name qqsbx
删除配置项
git config --global --unset 属性
下面我们提出git的三个重要概念区域
工作区 暂存区 版本库
我们执行了以上命令git就能管理了吗???
并不见得 我们需要将对应的文件进行add commit才行
这里add就是将文件上传到暂存区 commit就是将缓存区的文件提交就行版本控制 主要的流程如下
这里的版本控制咋实现的??
其实就是维护一个objects对象库
然后对应的master分支等就是保存起的版本索引
每次只切换索引 修改索引即可 比较轻量级
master分支下也是一个目录树,存储的也是索引
只要拿到对应的head指针就能拿到 master分支 就能拿到对象
添加命令
git add . 就是将所有的新增文件加进去暂存区 git add file 也可以输入文件名来进行添加
确认命令
git commit -m "描述"
查看日志
git log //查看好看的日志 一行展示 git log --pretty=oneline
我们知道对应的git仓库就是隐藏文件.git
这里.git/HEAD中存放的就是master
master中存放的就是对应的本地提交的一个commitID
查看git文件的内容
git cat-file -p commitID
注意一定要add了之后才能commit
git追踪管理的并不是文件 而是对修改追踪
我们可以查看仓库状态来查看
查看仓库状态
git status
也可以查看到文件的新增内容
查看文件变化内容
git diff file(文件名)
OK下面就到了我们最经典的版本控制以及回退功能的操作了
这里我们先画个图理解一下
版本回退
git reset --soft/--mixed/--hard HEAD
这里的soft就是只回退工作区
mixed可以省略是默认的 是回退工作区和暂存区
hard也是最危险的 可以直接回退工作区 暂存区 版本库的内容
我们可以通过以下命令来进行回退
git reset --hard commitID //这里commitID就代表了某个版本
然后如果我们回退错了
但是还记得新版本的版本commitId 也是可以进行恢复的
但是日志一多就很容易找不到之前的版本号
我们只想回退工作区的时候可以使用
git checkout -- 文件名
我们想回退一个版本可以使用
git reset --hard HEAD^ //这里的HEAD就表示当前版本,加上一个^就表示上一个版本 如果多加几个^就表示前n个版本
如果我们想进行删除文件可以使用以下命令
删除文件
rm file -> add -> commit 或者可以使用git提供的命令 git rm file ---> 这个命令是直接包含add操作的 后面直接commit 即可
分支管理
我们知道git一般是由多个分支的
我们在开发的时候是往往由不同的分支来开发
经过一定的审核之后再融入主分支的
这里每个文件的更新是以子节点的形式产生的
比如a文件更新了
这里在版本库下就是更新前的id 指向更新后的id
更新后的id是更新前id的子节点
下面是一个简单的创建分支的过程
查看分支
git branch
HEAD指针就是用来指向工作分支的
就是以HEAD分支来区分当前的工作分支是哪些
创建分支
git branch 分支名
假设我现在新增一个dev分支
结果图就是这样的
注意这里的分支是在最新的版本基础上创建出来的
所以新创建的dev分支就只有最新版本这一个版本的版本号
切换分支
git checkout 分支名
我们这个时候就可以切换到对应分支
然后使用 第一条命令 带星号指向的就是当前的工作分支
合并分支
git merge dev
注意这里是不能再本分支上合并本分支的
一定要切换到其他分支才能合并本分支
删除分支
git branch -d
创建并切换
git checkout -b 新分支名 这里的-b 就是branch
我们知道这里的合并经常会出现合并冲突问题
解决方案也就是手动解决加上重新上传即可
手动解决就是git会给对应的文件加上一段代码进行选择
我们只需要选择我们需要的版本即可
修改完重新 add commit 即可
我们举个例子
假设我在dev分支修改了原文件
然后再master分支也修改了这个文件
这个时候我们想把dev分支merge进master分支
就会出现合并冲突问题
类似于下图
此时的状态就是这样的