分布式进行存储,合并工作,每人电脑上都存储了完整的文件修改记录,无需联网既可以工作 git文件类型 untracked - 未被仓库追踪 modified - 文件被修改-还没放入暂存区 staged - 暂存区未commit的文件 committed - 文件提交到版本库中 deleted - 已删除的文件 - 手动、命令行删除此状态分别在工作区中、暂存区中,所以需要add、commit提交的版本库中 renamed - 重命名文件 - 此文件状态在暂存区中 git存储分区结构 working directory 工作目录 staged index 暂存区 repository 版本库
参数缩写 → ‘-缩写的参数’、参数不缩写 → '–参数’
$ git status // 显示当前状态下还有什么文件没有放入版本库中,即当前哪些文件被修改 $ git diff // 工作区与暂存区的差异 $ git diff --cached / staged // 暂存区与版本库的差异 $ git diff head -- 文件 // 版本库最新版本的文件与工作区 进行比较 $ git diff 版本号 -- 文件 // 比较指定版本库文件与当前工作区文件内容的差异 $ git diff 版本号1 版本号2 // 比较两个版本文件的差异 $ git diff 分支名 // 比较当前分支与'分支名'分支的差异 $ git show 版本号 // 在 bash 查看该版本下的的所有文件的内容
切记暂存区的文件已经存储了版本库的最新版本
$ 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之后,暂存区并没有清空,依然保留了先前所有放入暂存区的信息
即每个版本号实质对应的是每个时期下所有文件的状态内容
// 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 文件 reset 无文件参数 --soft → 将head指针指向某个版本,意味着当前head指针之后的版本看不见 --mixed → soft的作用、以及将暂存区文件修改为版本号的文件 --hard → mixed的作用、以及将工作区文件修改为版本号的文件 有文件参数 --mixed → 指定版本号的的指定文件恢复到暂存区
语法结构
// 创建文件 $ 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 任何修改不在被版本库追踪