Git: 最大的分布式版本控制系统。
Git的使用:
工作流程:
Git本地操作的三个区域:
本地仓库,也称本地版本库
// 设置用户名
$ git config --global user.name "用户名"
// 设置邮箱
$ git config --global user.email "用户邮箱"
//创建仓库
$ mkdir 仓库名
// 进入项目目录
$ cd 目录名
// git 仓库初始化
$ git init
Git常用指令操作:
// 查看当前状态
$ git status
// 添加到缓存区
$ git add 文件名
或者 $ git add 文件名1 文件名2 文件名3
或者 $ git add . // 表示添加全部
// 提交到版本库
$ git commit -m"注释内容"
版本回退:
// 查看版本,确定要回到的时间点
$ git log
$ git log --pretty=oneline(⭐)
//回退操作
$ git reset --hard 版本号
注意,回到过去之后,想要再回到之前最新的版本,需要使用指令查看历史操作,以便得到最新的commit id (commit id 可以不用写全,但是至少写前四位)
指令:
$ git reflog
Githup两种常规使用方式:
-
基于http协议:
-
创建一个空目录
-
使用clone指令克隆线上仓库到本地
-
$ git clone https地址名
3. 在仓库做相应操作
// 往线上仓库提交东西
$ git push
首次往线上仓库提交东西时,如果出现403错误,原因是不是任何人都能往线上仓库提交东西,需要鉴权。
需要修改" git / config "文件内容。
// 拉取线上仓库
$ git pull
注意:每天工作开始前,先git pull拉取线上仓库,每天工作完成后,git push提交到仓库。
-
基于SSH协议
-
创建公私钥对(需要先自行安装OpenSSH)
$ ssh-keygen -t rsa -C"注册邮箱"
一直回车即可
2. 上传公钥内容,保存即可
3. 执行后续git操作
分支管理:
-
主要是为了应对多人开发
-
git把每次提交的记录穿成时间线,形成一个类似时间轴的东西,这个时间轴我们称为 master分支。
分支相关指令:
// 查看分支
$ git branch //如果有*表示当前分支
// 创建分支
$ git branch
// 切换分支
$ git checkout
不同分支下创建的内容不会在一个分支中显示
例如:
这是在master分支下创建的txt文字内容:
然后切换到dev分支:
添加内容:
再回到master分支,新创建的语句会消失:
// 删除分支
$ git branch -d
// 合并分支
$ git merge 被合并的分支名
// 对于新分支,可以使用如下来切换分支
$ git checkout -b
-
将dev分支与master分支合并:
合并之后即使在master分支下也可以看到dev分支的内容啦~
-
删除dev分支:
注意:删除分支时要注意推出当前分支
冲突的产生与解决:
-
产生原因:本地仓库与线上仓库不一致且再提交之前没有git pull
-
解决办法:
-
先git pull
-
与之前提交文件的同事商量,看文件如何取舍,将改好的文件再次提交即可。
-
关联远程仓库
git remote add origin git@github.com:xxxx
推送到远程仓库
git push -u origin master
查看远程仓库
$ git remote -v
origin git@gitee.com:KKKLxxx/test1.git (fetch)
origin git@gitee.com:KKKLxxx/test1.git (push)
删除远程仓库
根据名字删除
$ git remote rm origin
使用步骤:
1. 如果是拉取的别人的项目自己写。首先要把git文件删掉。
2. 如果是拉取公司的项目,别忘了建分支。
git clone (仅在项目开始前克隆一次仓库)-> git pull -> git checkout -b 新分支 -> (开发ing...) -> git add . -> git commit -m"xxx" -> 【git push origin 新分支(模块未开发完)】git checkout master ->git merge 新分支 -> git push (模块开发完)
忽略文件的使用:
为什么使用忽略文件?
因为项目目录下很多不需要改变的文件目录:比如css,js,images等。我们就可以使用忽略文件来实现不让其提交到远程仓库。
实现方法:
-
新建一个.gitignore的文件 (在文件中写命令,#表示注释),这个文件用来声明忽略文件或不忽略文件的规则(在需要忽略的文件里建)
-
通过命令行来touch创建
-
// 过滤整个文件夹
/mtk/
// 过滤所有.zip文件
*.zip
// 过滤某个具体文件
/mtk/do.c
// 不过滤具体某个文件
文件名前面加!
例如:!index.php (意思是不过滤index.php 文件 )
提交规范用语
feat: 新增 feature
fix: 修复 bug
docs: 仅仅修改了文档,比如 README, CHANGELOG, CONTRIBUTE等等
style: 仅仅修改了空格、格式缩进、逗号等等,不改变代码逻辑
refactor: 代码重构,没有加新功能或者修复 bug
perf: 优化相关,比如提升性能、体验
test: 测试用例,包括单元测试、集成测试等
chore: 改变构建流程、或者增加依赖库、工具等
revert: 回滚到上一个版本