git的基本使用
写在前面的话
git安装不在本节内容范围内 这里只对git的基本操作展开探索
git结构
git结构分为三个 分别是工作区,暂存区和本地库 工作区 是我们用来存放源码的目录 暂存区 是临时存放写好代码的地方 方便撤回或提交到本地库 本地库 是用来存放代码历史版本的目录
git & github
git 是版本控制管理工具 用来对本地代码版本进行管理 github 是用来存放历史版本的远程仓库(也叫做代码托管中心) 另外 代码托管中心除了github外 境内还有gitee,局域网内可以使用gitlab作为代码托管中心
开始正文
git命令行操作
初始化本地库
指令 git init 效果 - 会在本地库的目录种创建.git目录 该目录是用来存放git对当前本地库描述及配置文件的 
设置本地库签名
为什么需要本地库签名 是用来区分代码是由哪个用户来提交的 (区分用户之间的身份) 指令 git config [--global] user.name userName git config [--global] user.email userEmailAddress 解释:不添加--global时表示项目级别/仓库级别范围,添加了--global时表示当前操作系统用户级别范围 项目级别或仓库级别范围 只是针对当前的本地库有效 项目级别范围设置的签名会被保存在当前本地库.git/config文件种 操作系统用户级别范围是针对当前登录的用户范围内有效 系统用户级别签名信息会被保存在根目录下.gitconfig文件中 优先级问题: 项目级别和系统级别同时存在 采用项目级别 项目级别不存在时会采用系统级别 两者都不存在 不允许提交到本地库(无法提交本地库就更不能推送到远程库) 注意 这里设置的本地库签名与登录到远程库(代码托管中心)的账号和密码没有任何关系
项目级别

系统用户级别

添加到暂存区
将工作区中的代码添加到暂存区 指令 git add + fileName // 单个文件添加到暂存区 git add . // 批量添加到暂存区
提交到本地库
将暂存区中的内容添加到本地库中 指令 git commit -m “备注信息” + fileName // 单个文件提交到本地库 git commit -m “备注信息” -a // 批量添加
查看本地库当前状态
指令 git status 本地库中没有文件时的状态  本地库中存在文件 但未提交到暂存区时状态 
执行了git add后的状态
将工作区中内容添加到暂存区后状态 
执行git commit后的状态
将暂存区中内容添加到本地库后状态 
修改了工作区中内容后状态
修改了工作区中文件内容 但未提交到暂存区时的状态 
修改工作区中内容并执行git add操作后的状态
将工作区中的内容添加到暂存区后 
修改工作区中内容从暂存区提交到本地库后的状态
执行了git commit后状态 
查看历史信息
显示全部内容 git log 单行显示 - index全部显示 git log --pretty=oneline 单行显示 - index部分显示 git log --oneline 带有指针移动步数 git reflog
显示全部历史信息
多屏显示时使用git log | less 空格向下翻页 b向上翻页 q 退出 
单行显示 - index全部显示
单行显示 - index部分显示

带有指针移动步数日志信息

版本前进或后退
基于索引值 [推荐]
指令 git reset --hard + 索引值 先执行git reflog 查看需要回退或前进的版本的部分索引值 然后通过–hard+索引进行移动版本指向的指针 
基于^符号 [只能后退 不能前进]
git reset --hard HEAD^ 表示回退一个版本 git reset --hard HEAD^^ 表示回退两个版本 一个^符号表示后退一步 想要后退多步就要写多个^符号 后退后看不到之前的版本了 
基于~符号的 [只能后退不能前进]
git reset --hard HEAD~10 表示后退10步 git reset --hard HEAD~5 表示后退5步 注意 ~符号加数字表示往后退的步数,不能向前 
前进后退中使用到reset命令参数对比
通过git help reset查看reset命令使用 reset提供了三个参数 分别是solf,mixed和hard solf 仅在本地库中移动HEAD指针 mixed 在本地库中移动HEAD指针同时重置暂存区 hard 在本地库中移动HEAD指针同时重置暂存区和工作区 solf 仅在本地库中移动HEAD指针 移动后暂存区会出现未提交本地库提示  mixed 在本地库中移动HEAD指针同时重置暂存区后会出现未提交暂存区提示  hard 将本地库,暂存区,工作区同时移动 因此不会出现未提交暂存区或本地库提示 
文件删除后找回
前提 文件删除前必须提交到本地库 本地库中的文件删除后 可以通过回退历史版本方式 回退到删除之前的版本就可以找回被删除文件了 参照上边的版本前进或回退就好了,这里不做过多的赘述
暂存区中的文件删除找回
文件已经提交到本地库中,但工作区中删除并提交到暂存区未提交到本地库 此时通过如下指令找回 git reset --hard HEAD // 本地库中最新版本 暂存区未提交到本地库中时HEAD指针肯定是在最新版本上的, 如果删除操作已提交到了本地库 使用版本后退方式找回
文件差异比较
指令 git diff [文件名] 将工作区中的文件和暂存区中的文件进行比较  git diff [本地库中的历史版本][ 文件名] 将工作区中的文件和本地库中历史记录文件进行比较 git diff 如果不带文件名 则是比较多个文件 
分支管理
什么是分支? 在版本控制过程中 使用多条线同时推进多个任务 通常情况下是在分支中开发应用 测试通过后在合并到master分支中 使用分支的好处 可以同时并行推进多个功能的开发 提高开发效率 各个分支在开发过程中如果某个分支开发失败 不会对其他分支产生影响,失败的分支删除或重新开始即可 分支的操作
查看当前项目存在哪些分支
git branch
查看当前所在分支
git branch -v
创建分支
git branch +分支名称
切换分支
git checkout +分支名称 
合并分支
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
分支冲突解决
冲突产生原因 两个或多个分支修改了同一个文件 而在非最新内容情况下进行修改的,那么此时如果对分支进行合并则会出现冲突 如下图  另外合并失败会显示合并状态 而不是某个分支  解决方案 手动将出现冲突的内容进行合并 然后删除标记分支的特殊符号 例如<<<<<<HEAD 或====== 然后使用git add 标记冲突已解决 在进行提交到本地库 此时一切恢复正常  解决完冲突提交本地库时 git commit 不可以带有文件名 如果是批量可以 git commit -m “xxx” -a 单个文件 git commit -m “xxx” 就可以了 
|