文章目录
1. 简介
- 用来记录一个文件的修改情况,可随时的还原不同状态下的文件内容 → 而无需自己手动的保存不同修改状态下的文件。
- 分布式进行存储,合并工作,每人电脑上都存储了完整的文件修改记录,无需联网既可以工作
2. Git语法文档
$ git help 命令 // 自动打开浏览器展示 '命令'的使用语法
$ git --help 命令 // 一样的作用
3. 语法
参数缩写 → ‘-缩写的参数’、参数不缩写 → '–参数’
0. 无git前缀的命令 ( 与仓库无关的 )
$ pwd // 显示当前目录( print working directory )
$ ls -a // 显示当前目录下的文件( 包括隐藏文件 )
$ ls // 显示当前目录下的文件( 不包括隐藏的文件 )
$ > 文件名.文件类型 // 当前目录下 创建 新文件
$ > touch 文件名.文件类型
$ mkdir 目录名 // 当前目录下 创建 新目录
$ mv 文件1 目录1 // 文件1 剪切到 目录1下
$ echo '内容1' >> 文件1 // 内容1 添加到 文件1 里面 -- 目录输写:“目录名/”
$ echo '内容2' > 文件1 // 内容1 覆盖 文件1 里面的内容
$ vim 文件1 // 在 bash中 查看并编辑文件1
$ cat 文件1 // 在 bash中 显示 文件1的内容
$ rm -rf 文件路径 // 删除文件、文件夹
1. 文件的状态查询/以及用户信息设置
// 设置用户信息( 邮箱、用户名 )
git config --global username 用户名
git config --global useremail 邮箱
//
git config --list //显示当前git所有配置的信息 --- 按键盘q来退出当前的输出,转入等待下一条输出
$ git reflog // 查看从建仓库开始之后用户使用的所有命令记录 -- 版本号、命令、描述
$ git log // 显示所有提交到版本库的详细记录 -- 作者、日期、记录编号、版本描述
$ git log -n // 前n条提交记录
$ git log --oneline // 显示所有提交到版本库的记录 -- 仅包括记录编号以及版本描述
$ gitk // 可视化工具查看文件的的commit 记录
2. 同一文件名的内容差异 - 差异显示
$ git status // 显示当前状态下还有什么文件没有放入版本库中,即当前哪些文件被修改
$ git diff // 工作区与暂存区的差异
$ git diff --cached / staged // 暂存区与版本库的差异
$ git diff head -- 文件 // 版本库最新版本的文件与工作区 进行比较
$ git diff 版本号 -- 文件 // 比较指定版本库文件与当前工作区文件内容的差异
$ git diff 版本号1 版本号2 // 比较两个版本文件的差异
$ git diff 分支名 // 比较当前分支与'分支名'分支的差异
$ git show 版本号 // 在 bash 查看该版本下的的所有文件的内容
3. 修改的文件提交到暂存区、版本库
切记暂存区的文件已经存储了版本库的最新版本
$ git init //在当前目录下新建一个空仓库(.git) 类型(隐藏的.git文件目录) -- 顾名思义文件还未被追踪
$ git init --bare // 裸仓库-只保存历史提交的版本信息 创建的仓库不包含工作区--即不能在目录下使用一般的Git命令 ---- 没有所被修改的文件、只记录修改的信息
$ git add 文件/.(所有文件) // 把当前被修改的文件放在暂存区中
$ git commit -m "描述信息" // 把暂存区的文件放入版本库中,并描述其此次版本的变化
$ git commit -am '描述信息' // 工作区的文件放入版本库中
$ git commit --amend // 撤销上次提交,并将暂存区文件重新提交,且可只修改版本变化的描述
$ git restore --staged 文件 // 暂存区的文件被撤销,转为工作区文件
$ git reset head/版本号 文件 // 直接把暂存区同名的文件restore为工作区 -- 把该版本库文件放置在工作区底层,之前修改的部分在这底层之上 -- 即当前版本为版本号下的文件,不过被之前的修改覆盖了,只要用checkout删除被修改的部分,即文件恢复到版本库的文件
注意commit之后,暂存区并没有清空,依然保留了先前所有放入暂存区的信息
4. 工作区回滚到指定版本库的文件
即每个版本号实质对应的是每个时期下所有文件的状态内容
// checkout - 复制一份最新的文件到某个区
$ git checkout -- 文件/.( 所有文件 ) // 暂存区最新的文件 复制且覆盖到 工作区
$ git checkout head -- 文件/.( 所有文件 ) // 版本库的最新版本的文件 复制且覆盖到 工作区、暂存区
$ git reset --hard head~n //head是个指针,指向最新的版本库文件,0表示当前文件,1表示上一个文件,依次类推 --- 工作区与暂存区的文件内容回滚到版本号的文件
$ git reset --mixed 版本号 // 暂存区内容回滚到版本号的内容
$ git reset --hard 版本号 // 暂存区、工作区回滚到指定版本
// 两者作用一样,指定文件参数的只有 --mixed参数可用
$ git reset --mixed 文件
$ git reset 文件
5. 文件的删除、重命名
// 直接选中所需要删除的文件删除、deleted文件状态是在 工作区
$ git rm 文件 // 删除未修改状态的文件、且deleted文件状态 放置在 暂存区 -- 必须是未修改的状态
$ git rm --cached 文件 // 将暂存区的文件删除 前提:工作区文件必须与暂存区文件内容一致 -- 有deleted
$ git rm --force 文件 // 强行将本地文件删除,即使工作区有文件内容改动 且没有delete状态,即此次的删除的文件不会有机会留在版本库中
$ git mv 原文件名 新文件名 // renamed文件状态 放置在 暂存区 中 -- 实质文件名已经更改,版本库并无对此新文件的追踪 ---- 一旦restore 新文件名则就会发现 此新文件并没有被版本库追踪,需要自己 add commit被版本库追踪
// renameed状态的文件一旦被提交,实质一同把新文件名被版本库追踪
6. 创建 “忽略文件” – 不会被仓库追踪的文件
语法结构
// 创建文件
$ touch 文件
$ > 文件
// 删除文件
rm -rf 文件
$ touch .gitignore // 创建"忽略文件" --- 在里面填写不需要被仓库追踪的文件
$ vim .gitignore // 编辑文件 忽略书写格式:文件名 、目录名\
ESC :wq // 保存并退出Vim编辑
1. 版本库中没有该文件的前提下
" * " 在此表示忽略所有以lrc、lrc2命名的所有文件类型
2. 版本库中在创建.gitignore之前文件已经被追踪
① one.txt在未编辑.gitignore之前已经被版本库追踪
② 创建one命命名的任何类型的文件查看版本库是否对其追踪
③ 如果修改、删除one.txt该文件、依然会被追踪 – 因为其已经被版本库追踪了在①下
编辑修改并保存 one.txt
④ 在版本库中删除对one.txt的追踪
$ git rm --cached one.txt // 版本库取消对该文件的追踪 -- one.txt 任何修改不在被版本库追踪