![609a5fa433b7b8df1687c74005e49626.png](https://i-blog.csdnimg.cn/blog_migrate/6a56ef5cb4413abbe727335044cd33ed.jpeg)
快看快看,思行也是个标题党
老板:小明,上个版本页面比这个好看一点,换上个版本
小明:好的 //找到上个版本备份文件
老板:小明,前几天那个版本弄出来,和这个对比一下,我看看哪个好看一点
小明:好的 //找到前几天的那个版本备份文件
..............
老板:小明,你把去年那个版本弄出来,我还是觉得去年那个版本比较好
小明:老板,我要回家种田了
ps:如果这个项目开始小明就用了版本控制器,去年的还是前年的,只要提交过,秒秒钟给老板搞出来
git是什么
分布式版本控制系统
分布式 //每个人电脑都可以建立一个独立的代码仓库,对仓库的各种操作都可以在本地完成,如果需要团队合作可以push(推送)到远程仓库,以便其它团队成员进行pull(拉取)
版本控制系统// 最主要的功能就是追踪文件的变更
为什么要用版本控制系统
1.文件回溯到之前的状态
2.比较文件的变化细节
3.团队合作
git常识
通过git init 初始化文件夹
工作区 //你写好了一个文件,这个文件就在工作区
暂存区 //通过git add . 把工作区的文件放入暂存区
本地仓库 // git commit 把暂存区文件提交到本地厂库
远程仓库 //如果需要团队合作,需要将文件放到一台其他开发人员能够连接的服务器上,那台服务器上的仓库为远程仓库
忽略文件 .gitignore //文件里配置规则,过滤掉哪些文件 文件夹不需要进行版本管理
下面介绍git比较常用的命令,当然你可以下载git的可视化工具,但是思行习惯了命令操作git,所以不介绍怎么使用可视化工具了(cmd的界面命令B格不是更高么)
git入门流程
a.提交本地仓库流程
安装git及配置变量环境->git init 初始化一个项目文件夹做为本地仓库
进入此项目文件夹进行正常的工作->进入当前项目路径下的cmd界面进行git add . 把所有的项目文件加入暂存区->使用git commit把暂存区的文件提交到本地仓库
b.把本地仓库提交远程仓库
添加好远程仓库路径
git pull 获取远程仓库代码进行合并(如有冲突需要解决)->git push 把代码提交到远程仓库
git的常用命令
1.本地仓库基本操作
git init //初始化一个文件夹
git add . //把工作区的所有文件加入暂存区
git commit -m "first commit" //把暂存区的文件提交到本地仓库。注释为first commit
git reset --hard commit_id //本地版本回退(可用 git log --oneline 查看)
2.本地仓库查看状态操作
git status //查看代码状态 如新增修改的状态
git diff //查看工作区中的文件改变内容
git diff --staged //当git add . 命令后,使用git diff 无法查看到暂存区的内容,可以使用这个
git log //查看提交仓库的所有记录 git log -3 只看最近3的提交
3.远程仓库操作
git remote add origin git://http://github.com/t.git //把远程仓库地址git://http://github.com/t.git添加为远程地址 origin是个名字,这个你可以随便用什么名字代替,这个名字就代表了哪个远程仓库了
git remote set-url origin git://http://github.com/c.git //把远程地址换成git://http://github.com/c.git
git remote rm origin //删除远程仓库地址
git remote -v //查看远程仓库地址
git push //把代码push(推送)到与之建立关联的远程仓库分支上
git pull //把与之建立关联的远程仓库分支上的代码pull(拉取)到本地
ps://如果当前分支master与多个主机存在追踪关系git push -u origin master 相当于 git push origin master + git branch --set-upstream-to=origin/master master之后就可以git push了
4.分支操作
git branch dev //创建分支dev
git checkout dev //从当前分支跳转到dev分支上
git branch -d dev //删除dev分支 (参数小写d会检查是否和上游分支合并没,参数大写D不会检查是否合并)
git branch dev b92ac7b //恢复hash值为b92ac7b的dev分支
git reflog //查看提交的hash值
git merge dev --no-ff //把dev分支合并到当前分支,可以去看看--no-ff的意思,也可以看其它参数的意思
git push origin :dev//删除远程dev分支
git push origin dev:master // 提交本地dev分支作为远程的master分支
git checkout -b dev origin/master 从远程仓库里拉取master分支到本地并命名为dev分支
5.思行在工作中比较常用并感觉方便的命令
有时候写了一半代码,就被叫去改另一个分支的bug了,但你又不想commit时
git stash //把写了一半的代码存储起来,切换分支去解决bug
git stash list //查看存储记录
git stash pop stash@{0} //bug解决后切回分支,然后从存储里取出指定(stash@{0}为具体的某个存储,可以用git stash list查看有哪些存储)的存储,并删除这个存储内容
git flow
![3c766b4d9d04d685d489fad69541adf4.png](https://i-blog.csdnimg.cn/blog_migrate/09358cbb0f34c3af8e72a895a8ead977.jpeg)
如果看到这了,我们点个赞在走好不好
以上知识点太过官方了,我试着用自己的话表达出来什么是git(如有错误理解请指出,谢谢)
git 是分布式版本控制器。版本控制器就是对项目文件进行某些命令后可以追踪项目文件的状态,比如项目能恢复到任意提交命令后的代码状态(这是版本控制器的核心点),比如对每个提交后的项目进行内容比较,合并等等操作; 分布式可以就是每个人的电脑在无网的环境下照样不影响你对项目版本的控制(它是独立的),当你需要团队合作时,只需把你代码提交到远程仓库,团队成员就能获取到你的项目的各个版本并可以进行版本控制
git add加入暂存区时会对每个文件生成一个blob类型的对象,并生成一个唯一的索引指向这个对象,当git commit时会对每个文件夹生成一个tree对象,里面包含文件夹下面的更个文件及文件夹生成的更个索引以及类型等信息,并生成一个唯一的索引指向这个对象,最后生成一个commit对象,这个对象里面包含了整个项目生成的tree对象的索引及类型和上个版本(一个或多个)的索引以及项目作者的信息。所以根据这些索引,是可以回退到任意次commit后的项目状态的以及版本之间差异比较以及合并等等。 (也就是说只要知道某个文件的索引,丢失了也可以恢复,git reset 只能回退提交后的状态也就是commit对象,如果是恢复暂存区的一个文件的话还好(提前你知道这文件索引),多了的话,还不如重写的了,所以建议多做commit)
commit对象
![364f0330155966dc75d6f3187c58c1dd.png](https://i-blog.csdnimg.cn/blog_migrate/eaab8a271c50d3bef41cefeb2de57ef3.png)
tree对象
![c4a8a4b9a15182bf334dd2f51e25a54e.png](https://i-blog.csdnimg.cn/blog_migrate/19df3432aad138137a0aa1c9049ae9e1.png)
blob对象
![7bf1678ba64878af48be23bad48779cc.png](https://i-blog.csdnimg.cn/blog_migrate/6f4bfa1b477f5703bfb65505ee94a9b7.png)
只要索引前面是四位就可以定位文件所在了,前2位是blob文件存放的文件夹名,后38位是blob文件名
2020/08/16
就是每一个文件,文件夹经过特定的算法生成一个索引,根据这个索引可以找到对应处理好的文件或者文件夹,每个版本也根据这些索引加上上一个或者多个的索引及其它元素生成对应的索引,所以根据版本的索引可以回退等等一系列操作(文件的索引根据文件内容生成一个索引,而这个索引影响文件夹的索引生成,最终影响版本的索引生成)再简单一点就是树的叶子节点内容决定本身的索引以及父级节点的索引,一层层一直决定根的索引,每次提交生成一个这样的树,根据这些根节点就可以跟踪到每个节点的状态和上一个版本的索引,就这样可以一直追踪到第一个版本的状态。正常的情况下,只要项目文件经过git add加入暂存区的,丢失了也能恢复,只不过会比git commit 提交后在丢失恢复麻烦 2020/08/15