git的基本使用
写在前面的话
git安装不在本节内容范围内 这里只对git的基本操作展开探索
git结构
git结构分为三个 分别是工作区,暂存区和本地库 工作区 是我们用来存放源码的目录 暂存区 是临时存放写好代码的地方 方便撤回或提交到本地库 本地库 是用来存放代码历史版本的目录
git & github
git 是版本控制管理工具 用来对本地代码版本进行管理 github 是用来存放历史版本的远程仓库(也叫做代码托管中心) 另外 代码托管中心除了github外 境内还有gitee,局域网内可以使用gitlab作为代码托管中心
开始正文
git命令行操作
初始化本地库
指令 git init 效果 - 会在本地库的目录种创建.git目录 该目录是用来存放git对当前本地库描述及配置文件的 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e1746e5719674828bda82d4a09c06eb9.png)
设置本地库签名
为什么需要本地库签名 是用来区分代码是由哪个用户来提交的 (区分用户之间的身份) 指令 git config [--global] user.name userName git config [--global] user.email userEmailAddress 解释:不添加--global时表示项目级别/仓库级别范围,添加了--global时表示当前操作系统用户级别范围 项目级别或仓库级别范围 只是针对当前的本地库有效 项目级别范围设置的签名会被保存在当前本地库.git/config文件种 操作系统用户级别范围是针对当前登录的用户范围内有效 系统用户级别签名信息会被保存在根目录下.gitconfig文件中 优先级问题: 项目级别和系统级别同时存在 采用项目级别 项目级别不存在时会采用系统级别 两者都不存在 不允许提交到本地库(无法提交本地库就更不能推送到远程库) 注意 这里设置的本地库签名与登录到远程库(代码托管中心)的账号和密码没有任何关系
项目级别
![在这里插入图片描述](https://img-blog.csdnimg.cn/0cc84d825a934bfa85452cadf3f79d2b.png)
系统用户级别
![在这里插入图片描述](https://img-blog.csdnimg.cn/86134e5d542a4d53aa47476e7b056911.png)
添加到暂存区
将工作区中的代码添加到暂存区 指令 git add + fileName // 单个文件添加到暂存区 git add . // 批量添加到暂存区
提交到本地库
将暂存区中的内容添加到本地库中 指令 git commit -m “备注信息” + fileName // 单个文件提交到本地库 git commit -m “备注信息” -a // 批量添加
查看本地库当前状态
指令 git status 本地库中没有文件时的状态 ![在这里插入图片描述](https://img-blog.csdnimg.cn/a61ebb518687438eb899f474d41fc97b.png) 本地库中存在文件 但未提交到暂存区时状态 ![在这里插入图片描述](https://img-blog.csdnimg.cn/0ebb6b99506041b58335762815fb2069.png)
执行了git add后的状态
将工作区中内容添加到暂存区后状态 ![在这里插入图片描述](https://img-blog.csdnimg.cn/55613ae75dbb47ae999fbd5c26aeb9e4.png)
执行git commit后的状态
将暂存区中内容添加到本地库后状态 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e8183a2421364035966447282e0107db.png)
修改了工作区中内容后状态
修改了工作区中文件内容 但未提交到暂存区时的状态 ![在这里插入图片描述](https://img-blog.csdnimg.cn/852f942c36b647c8843d0471a3c0bd62.png)
修改工作区中内容并执行git add操作后的状态
将工作区中的内容添加到暂存区后 ![在这里插入图片描述](https://img-blog.csdnimg.cn/7a54feb53aa4476e944b69134bb79729.png)
修改工作区中内容从暂存区提交到本地库后的状态
执行了git commit后状态 ![在这里插入图片描述](https://img-blog.csdnimg.cn/ab89996f09fd4b66973e8c0e4f182cc0.png)
查看历史信息
显示全部内容 git log 单行显示 - index全部显示 git log --pretty=oneline 单行显示 - index部分显示 git log --oneline 带有指针移动步数 git reflog
显示全部历史信息
多屏显示时使用git log | less 空格向下翻页 b向上翻页 q 退出 ![在这里插入图片描述](https://img-blog.csdnimg.cn/bba6288b53c64ca5b28bcb9f726271a8.png)
单行显示 - index全部显示![在这里插入图片描述](https://img-blog.csdnimg.cn/be72a7cd73d342e7aa8f8bed8cd77759.png)
单行显示 - index部分显示
![在这里插入图片描述](https://img-blog.csdnimg.cn/327a236f961647d3b3ddc602666d9968.png)
带有指针移动步数日志信息
![在这里插入图片描述](https://img-blog.csdnimg.cn/e005d75454d444fd98f6769b236ec27f.png)
版本前进或后退
基于索引值 [推荐]
指令 git reset --hard + 索引值 先执行git reflog 查看需要回退或前进的版本的部分索引值 然后通过–hard+索引进行移动版本指向的指针 ![在这里插入图片描述](https://img-blog.csdnimg.cn/095be20b961e4cb4b10f5cc2b4b04604.png)
基于^符号 [只能后退 不能前进]
git reset --hard HEAD^ 表示回退一个版本 git reset --hard HEAD^^ 表示回退两个版本 一个^符号表示后退一步 想要后退多步就要写多个^符号 后退后看不到之前的版本了 ![在这里插入图片描述](https://img-blog.csdnimg.cn/7dfbd7785d044191808bd83f4ad83653.png)
基于~符号的 [只能后退不能前进]
git reset --hard HEAD~10 表示后退10步 git reset --hard HEAD~5 表示后退5步 注意 ~符号加数字表示往后退的步数,不能向前 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d568cf30836c4a20b82b1d88f7c9a0b0.png)
前进后退中使用到reset命令参数对比
通过git help reset查看reset命令使用 reset提供了三个参数 分别是solf,mixed和hard solf 仅在本地库中移动HEAD指针 mixed 在本地库中移动HEAD指针同时重置暂存区 hard 在本地库中移动HEAD指针同时重置暂存区和工作区 solf 仅在本地库中移动HEAD指针 移动后暂存区会出现未提交本地库提示 ![在这里插入图片描述](https://img-blog.csdnimg.cn/151b61efac5c462d8bd3151b817589ab.png) mixed 在本地库中移动HEAD指针同时重置暂存区后会出现未提交暂存区提示 ![在这里插入图片描述](https://img-blog.csdnimg.cn/3c7cb3cd55e1441c9ad26fc2e07350d2.png) hard 将本地库,暂存区,工作区同时移动 因此不会出现未提交暂存区或本地库提示 ![在这里插入图片描述](https://img-blog.csdnimg.cn/61ccd8f5a98b435db06e2216fa6daa80.png)
文件删除后找回
前提 文件删除前必须提交到本地库 本地库中的文件删除后 可以通过回退历史版本方式 回退到删除之前的版本就可以找回被删除文件了 参照上边的版本前进或回退就好了,这里不做过多的赘述
暂存区中的文件删除找回
文件已经提交到本地库中,但工作区中删除并提交到暂存区未提交到本地库 此时通过如下指令找回 git reset --hard HEAD // 本地库中最新版本 暂存区未提交到本地库中时HEAD指针肯定是在最新版本上的, 如果删除操作已提交到了本地库 使用版本后退方式找回
文件差异比较
指令 git diff [文件名] 将工作区中的文件和暂存区中的文件进行比较 ![在这里插入图片描述](https://img-blog.csdnimg.cn/af25679a4d03442699fa334cf4788e48.png) git diff [本地库中的历史版本][ 文件名] 将工作区中的文件和本地库中历史记录文件进行比较![在这里插入图片描述](https://img-blog.csdnimg.cn/e01e58d6d6cd4b08b86a106f258d3581.png) git diff 如果不带文件名 则是比较多个文件 ![在这里插入图片描述](https://img-blog.csdnimg.cn/ab78b50c5a2a4258aec35b8e3e2326d9.png)
分支管理
什么是分支? 在版本控制过程中 使用多条线同时推进多个任务 通常情况下是在分支中开发应用 测试通过后在合并到master分支中 使用分支的好处 可以同时并行推进多个功能的开发 提高开发效率 各个分支在开发过程中如果某个分支开发失败 不会对其他分支产生影响,失败的分支删除或重新开始即可 分支的操作
查看当前项目存在哪些分支
git branch
查看当前所在分支
git branch -v
创建分支
git branch +分支名称
切换分支
git checkout +分支名称 ![在这里插入图片描述](https://img-blog.csdnimg.cn/d728beb5a53446c288b03ae9e4564457.png)
合并分支
git merge +需要被合并的分支名称 在合并分支之前子分支组要提交到本地库(规范) 然后切换到需要合并到的分支上(例如合并到master 需要切换到master分支) 切换分支使用git checkout+分支名 最后执行git merge+要被合并的分支名称 指令 例如 将hot_fix分支合并到master分支 1 hot_fix分支需要先提交到本地库 git add,git commit 2 切换到master分支 git checkout master 3 执行合并指令 git merge hot_fix
分支冲突解决
冲突产生原因 两个或多个分支修改了同一个文件 而在非最新内容情况下进行修改的,那么此时如果对分支进行合并则会出现冲突 如下图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2b12d4842c7b4c2c9440d7ef67b98912.png) 另外合并失败会显示合并状态 而不是某个分支 ![在这里插入图片描述](https://img-blog.csdnimg.cn/08fc914df9224e00a213ce67df6f6413.png) 解决方案 手动将出现冲突的内容进行合并 然后删除标记分支的特殊符号 例如<<<<<<HEAD 或====== 然后使用git add 标记冲突已解决 在进行提交到本地库 此时一切恢复正常 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5227287767eb428da1fd9fefcbbfca82.png) 解决完冲突提交本地库时 git commit 不可以带有文件名 如果是批量可以 git commit -m “xxx” -a 单个文件 git commit -m “xxx” 就可以了 ![在这里插入图片描述](https://img-blog.csdnimg.cn/166703ce92844f2fafd3213c6dea6ff6.png)
|