【Git】基本操作
【简介】
Git是一种“版本控制器”, 可以用于记录每次的修改以及版本的迭代
其可以控制电脑上所有格式的文件,方便地查看文件的每个小修改版本都修改了什么内容,但前提条件是被管理的文件需要放在对应的git仓库(又名“版本库”)中
【初始化本地仓库】
git init 命令可以在所在的文件夹下创建一个“git本地仓库”
在创建仓库后, 就会在对应目录下出现一个隐藏目录“.git”, 这个隐藏目录就是“git仓库”(版本库),用来管理与追踪仓库内的文件修改
切忌修改版本库里面的任何内容, 一旦改乱了, 会把整个git仓库破坏掉,丧失功能
【对配置项进行操作】
在初始化本地仓库后, 需要新增两个配置项, 一个是name, 一个是email, 这两个是必须要配置的, 如果不配置, 可能让版本库功能失效, 需要通过git config 命令来配置, 这个命令可以对git配置项进行操作
通过git config -l 命令, 可以查看当前git本地仓库的所有配置项,通过查看末尾两行, 即可知晓配置成功
在git config 加上 --unset 命令, 可以删除指定的配置项,譬如, git config --unset user.name 可以删除user.name=baiye这个配置项
在git config 加上 --global 命令,表示当前命令在该机器下的所有git仓库下都生效, 譬如以下的这个命令可以让该机器的所有git仓库的姓名与邮箱都是指定的这两个值
通过--global 命令生效的配置无法直接被 --unset 命令删除, 而是需要通过--global --unset 命令才能在全局范围内, 把这个配置项重置掉
【将文件挪入仓库】
上图中【ReadMe】文件无法被git管理, 因为它不在git仓库中, 但万万不可以直接在git仓库中创建文件, 这很可能直接搞废这座仓库
除版本库之外的区域被称为【工作区】
【工作区】是一个重要的概念,虽然处于工作区中的【ReadMe】文件无法被git管理,但是通过一些方法就可以手动管理了
以下是版本库与工作区的交互流程图:
其中, stage区域是“暂存区”/“索引”
1.通过add命令, 可以将工作区中的修改(增删改)放入到版本库的暂存区中
2.通过commit命令, 可以将暂存区中的内容, 提交到master分支下
走完这两步, 把【ReadMe】文件提交到master分支下, 才能让git对这个文件进行管理
【对象库】
对象库也被版本库所维护,
当执行add操作后, 工作区会将修改内容写入到一个新的git对象中, 而这个git对象被对象库所维护, 因此对象库中存储的是一个个git对象
对文件的一份份修改操作都会以一个个单独的git对象的形式展现, 这就表示了对象库可以维护文件的一个个修改版本
【暂存区, master分支】
暂存区和master分支中所存放着的, 都是一个个git对象的索引
因此, 只要能拿到HEAD指针, 就能拿到master这棵树, 从而就能拿到某一个文件的具体修改内容, 从而可以管控这个文件
【add命令】
git add [文件名] ....命令可以将指定文件从工作区放入到版本库的暂存区中, 文件名可以指定好几个, 从而实现批量放入
git add . 命令则是可以将工作区中的所有文件放入到版本库的暂存区中
【commit命令】
git commit -m "[提交描述]" 命令,可以将暂存区中的内容, 提交到master分支下
【log命令】
git log 命令可以展示最近的提交记录
也可以通过git log --pretty=oneline命令, 打印漂亮可观的几行日志
【status命令】
git status 命令可以查看当前仓库的状态, 看看暂存区内有没有需要提交的内容, 它只能检测到工作区中有哪个文件进行了修改
【diff命令】
git diff [文件名] 命令用于显示当前文件在暂存区与工作区之间的差异
a/:改动前的文件名,b/:改动后的文件名
---:改动前 ,+++:改动后
-1:改动前的第一行内容 +1:改动后的第一行内容
通过status和diff命令, 就可以看到到底修改了哪些内容, 以及修改的具体行数
【版本回退】
【reset命令】

一旦使用--hard回退到了如上提交版本, 那么工作区也会回滚, file1-3这三个文件就再也找不回来了
【撤销修改】
【情况一:对于工作区的代码,还没有 add(代码存在于工作区)】
可以使用checkout命令

【情况二:已经 add ,但没有 commit(代码存在于工作区与暂存区)】

【情况三:已经 add ,并且也 commit 了(代码同时存在于工作区, 暂存区, master分支)】
【删除文件】

