Git
1.基础
git是世界上最先进的分布式版本控制系统
2.git与github区别
git是一个分布式版本控制系统,就是一个软件,用于记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的软件
github是一个为用户提供git服务的网站,简单说就是一个可以放代码的地方,github除了管理git的web界面外,还提供了订阅,关注,讨论组,在线编辑器等丰富的功能,github被称之为全球最大的基友网站
3.本地仓库
工作流程:
git在本地操作有三个区域:
- git Repository(Git仓库) 最终确定的文件保存到仓库,称为一个新的版本,并且对他人可见
- 通过
git commit [-m "描述"]
命令可以将暂存区的文件提交到仓库中 - 通过
git status
查看当前状态
- 通过
- 暂存区 暂存已经修改的文件最后统一提交到git仓库中
- 通过工作区使用
git add 文件名
命令即可将工作区的文件上传到暂存区 - 通过
git status
查看当前状态
- 通过工作区使用
- 工作区(Working Directory)添加,编辑,修改文件等动作
- 通过
git status
查看当前状态
- 通过
3.1本地仓库的操作
仓库又叫做版本库,英文名是repository,我们可以简单理解为一个目录,用于存放代码的,这个目录里面所有文件都可以被Git管理起来,每个文件的修改、删除等操作Git都能跟踪到
-
在安装好git后首次使用需要进行全局配置
在桌面空白处右键打开git bash here 运行一下命令
git config --global user.name "用户名" git config --global user.email "邮箱地址"
-
创建仓库
当我们需要让git管理某个新项目/已经存在项目的时候,就需要创建仓库,注:创建仓库时使用的目录不一定要求是空目录,选择一个非空目录也是可以的,但是不建议在现有项目上来学习git,因为可能会造成问题。
注:在学习过程中尽量不要再目录中出现中文
创建方法:创建一个文件夹并进入,初始化仓库
git init
-
git常用指令操作
查看当前状态:
git status
添加到缓存区(暂存区):
git add 文件名
git add指令可以添加一个文件也可以同时添加多个文件
语法一: git add 文件名
语法二: git add 文件名1 文件名2 文件名3
语法三: git add . 添加当前目录到暂存区
提交至版本库(仓库):
git commit [-m "注释"]
3.2.版本回退
版本回退分为两步进行操作:
-
查看版本,确定要回到的时刻点
指令:
git log 显示的是详细信息 git log --pretty=oneline 显示的是粗略信息
-
回退操作
git reset --hard 版本号
-
回退之后要去到未来
git reflog 查看历史操作 利用历史操作id来去到未来
4.远程仓库
4.1.基于http协议操作远程仓库
-
创建一个空目录testgit,这个目录名和仓库名相同
-
使用
clone
指令克隆线上仓库到本地git clone 线上仓库地址
如果报错
fatal: unable to access 'https://github.com/Autunomy/testgit.git/': OpenSSL SSL_read: Connection was aborted, errno 10053
那么使用命令就可以解决错误
git config --global http.sslVerify "false"
-
在仓库上做对应操作(提交暂存区、提交本地仓库、提交线上仓库、拉取线上仓库)
提交暂存区和提交本地仓库这两个操作和前面的本地仓库没什么区别,但是后面两步是有区别的
提交线上仓库
git push
拉取线上仓库
git pull
4.2基于ssh协议操作远程仓库
- 创建公私钥对(事先安装openSSH)
- 执行
ssh-keygen -t rsa -C "github注册邮箱"
- 在github中添加公钥
- 之后执行git操作
5.分支操作
在版本回退的部分,每次提交后都会有记录,Git把它们穿成时间线,形成类似于时间轴的东西,这个时间轴就是一个分支,我们称之为main(之前是master)分支
在开发的时候往往是团队协作,多人开发,因此光有一个分支是无法满足多人同时开发的需求的,并且在分支上工作并不影响其他分支的正常使用,会更加安全,Git鼓励开发者使用分支去完成一些开发任务
分支的相关指令
查看分支:git branch
创建分支:git branch 分支名
切换分支:git checkout 分支名
创建并切换:git checkout -b 分支名
删除分支:git branch -d 分支名
合并分支:git merge 被合并的分支名
注:删除分支的时候,一定要先退出删除的分支,然后再删除,如果在要删除的分支上就无法进行删除
6.冲突的产生与解决
案例:模拟产生冲突
-
首先直接在github页面对线上的仓库进行修改,如果在本地不进行git pull操作,那么本地和线上仓库的内容就会不一致
-
在本地我们又对同样的文件进行了更新,如果进行push操作就会产生问题
-
push之后就会进行报错
这一句话就提示了我们需要在push前先进行pull操作,那么此次提交到此是失败的
解决方法
先git pull 然后git就会自动合并冲突
这个就是自动合并冲突在readme.md文件中
之后只需要和其他人商量之后,删除多余的文件就可以了
7.忽略文件
在项目中有很多不会改变的文件目录,例如css,js,images等,或者还有一些目录即便有改动,也不想让其提交到远程仓库的文档,此时我们可以使用"忽略文件"机制来实现需求
忽略文件需要新建一个名为.gitignore的文件,改文件用于声明忽略文件或不忽略文件的规则,规则对当前目录以及子目录生效
注意:该文件因为没有文件名,没办法直接在windows目录下直接创建,可以通过命令行的touch命令来创建
常见的规则
/mtk/ 过滤整个文件夹
*.zip 过滤所有.zip文件
/mtk/do.c 过滤某个具体文件
!index.php 不过滤具体某个文件
略文件的规则,规则对当前目录以及子目录生效
注意:该文件因为没有文件名,没办法直接在windows目录下直接创建,可以通过命令行的touch命令来创建
常见的规则
/mtk/ 过滤整个文件夹
*.zip 过滤所有.zip文件
/mtk/do.c 过滤某个具体文件
!index.php 不过滤具体某个文件