什么是版本控制?
- 便于管理多人协同开发项目的技术
本地和集中式版本控制
- 本地版本控制
像我们自己本地电脑上做的备份或快照等,记录每次更新,适合个人使用 - 集中版本控制
集中就是把数据保存到服务器上,便于多人协同开发,存在风险,需要备份
分布式版本控制-Git
- 分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过拷贝一个完整的GIt仓库,可以查看所有版本历史,可以离线在本地提交,在连网时push即可,不会因为服务器就损坏或者网络问题,造成不能工作的情况,同时只要一个用户的设备没有问题就可以恢复所以的数据
工作区
Git本地有三个工作区,再加上远程的git仓库共有四个工作区:
-
1.工作目录(working Diectory)
工作区,就是你平时存放项目代码的地方 -
2.暂存区(style/Index)
暂存区,用于临时存放你的改动 -
3.资源库(Repository)
仓库区,就是安全存放数据的位置 -
git仓库(Remote Directory)
远程仓库,托管代码的服务器
工作流程
1.在工作目录中添加或修改文件
2.将需要进行版本管理的文件放入暂存区
3.将暂存区的文件提交到仓库
分支
- 分支默认时master主分支,可以创建新的分支用于不同的用途或不同部门的人并行开发,比如开发,测试,发布,紧急修复等等,从主线上分离出来进行另外的操作,而又不影响主线就像线程一样,或者看作互不影响的平行宇宙,当需要的时候还可以合并分支等操作
- 常用指令:
//列出所有本地分支
git branch
//列出所有远程分支
git branch -r
//新建一个分支,但依然停留在当前分支
git branch [branch-name]
//合并指定分支到当前分支
$ git merge [branch-name]
切换分支
$ git checkout [branch-name]
删除分支
$ git d [branch-name]
删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
HEAD指针与reset和checkout
- HEAD指针
GIT中存在一个HEAD指针,在每次提交时HEAD指针会向前进一位,同时HEAD指针只存在暂存区和仓库区。就是说如果我们使用git add命令,那么此时HEAD指针会进入到暂存区,继续用git commit,此时会进入到仓库区。 - git rest
git reset其实就是把HEAD指针回退一位,即如果你在仓库区,那么你回退一位就是暂存区,如果你在暂存区,那么指针会回退到上一次的仓库区,reset命令提供了三种使用方法,分别是 sort 、mixed、hard:
git reset --soft //移动指针
git reset --mixed//移动指针+清空暂存区
git reset --hard //移动指针+清空暂存区+清空工作区
-
git checkout
简单说,checkout就是把当前代码更新成HEAD指针指向的提交,除了前面提到的git checkout [branch-name]切换分支,其原理就是将HEAD指针指向另一个分支,同时将其覆盖。还可以git checkout[file-name],把内容更新成上一版提交,但前提是HEAD指针指向的提交与当前你所在的区域不同。 -
小结:
reset:头指针回退到上一个、还原本地文件(撤销)
checkout:更新当前代码为头指针指向的提交、还原本地文件(替换) -
fetch、clone和pull
-
适合场景
fetch:有本地仓库主分支,下载其他分支
clone:没有本地仓库
pull:本地仓库和远程仓库不同步 -
异同
fetch:从远程获取最新到本地,不会自己merg
clone:把仓库克隆到本地,无需有本地仓库(即git init)
pull:从远程获取最新并merge到本地
常用的linux命令
cd 改变目录
cd.. 回退上一个目录,直接cd进入默认目录
pwd: 显示当前所在的目录路径
# 表示注释
exit 退出
help 帮助
history 查看命令历史
clear 清屏
reset 重新初始化终端/清屏
mv 移动文件
rm -r 删除一个文件夹,rm-r src删除src目录
mkdir 新建一个目录,就是新建一个文件夹
rm 删除一个文件,rm index.js就会把index.js文件删除。
touch 新建一个文件 如touch index.js 就会把index.js文件删除
is(||) 都是列出当前目录中的所有文件,只不过||(两个||)列出的内容更为详细