什么是git
+ 官方名称:分布式版本管理器
+ 我们自己管理代码文件夹的问题
-->在原来的代码修改,一旦出问题,想回到前一个正常的功能比较麻烦
-->手动保存多个版本,版本一多,分不清楚了
+ 私人解释:就是一个管理我们的文件的工具
-->可以保留所有的版本信息
+ 就是我们安装一个软件
==>然后用这个软件管理我们的一个文件夹
==>这个文件夹被git管理以后,我们就可以对他进行各种操作
==>我们写的各个版本就不会丢失
什么是github
+ github是一个网站,是一个我们托管项目的平台: https://github.com/
+ 是一个世界级别的大型网站
+ 也就是说,我们写的项目的源码可以放在上面保存,只要我们不自己删除,就不会丢失
+ 就相当于百度云
+ 只不过功能更强大,上面都是开发人员(世界级别的)
+ 因为github只接受git来上传代码,所以叫做github
+ 也就是说,我们可以通过git来管理我们本地的文件夹
+ 并且可以把文件夹里面的代码上传到github保存
+ 可以写一个插件上传到github,提供给别人下载使用
+ 可以下载别人上传的插件/类库/框架,自己使用
+ 所以说,github是一个世界级别的源码分享平台
+ 类似github的网站有很多,国内比较有名的是码云:https://gitee.com/
git使用
+ 刚才我们说过,git是一个管理我们文件夹的工具
+ 那么我们就要先安装工具,才能管理我们的文件夹
安装git
1 下载:去官网下载就可以了:https://git-scm.com/
==>要找到对应的我们的自己的操作系统:windows
2 安装:双击,一直下一步(next)
3 检测:安装完成以后,桌面上没有图标
==>在任意位置打开命令行: git --version
==>或者
==>在任意位置点击鼠标右键,出现:Git Bash Here
==>就表示安装成功
4 使用:
==>在任意位置打开命令行,里面可以输入git命令
==>或者
==>在任意位置点击鼠标右键,点击Git Bash Here,里面可以输入git命令
==>这两者都可以,但是Git Bash Here是彩色的比较友好,所以使用它
git使用流程
1 自报家门--每个电脑做一次
==>告诉git当前使用者的信息,以后后面的操作,git给你添加一些信息
==>点击鼠标右键-->Git Bash Here
==>git config --global user.name "填写你自己的名字"
==>git config --global user.email "填写你的邮箱地址"
==>检测是否配置成功
==>git config --list
==>如果出现你刚设置的内容,就是设置成功了
2 git初始化
==>建一个项目文件夹,把这个文件夹给git管理
==>在项目文件夹的根目录,点击鼠标右键-->Git Bash Here
==>指令:git init
==>在项目根目录多一个.git的隐藏文件夹
==>这个文件夹不能删除,如果删除,所有的版本信息都会丢失
==>如果有的同学看不到这个隐藏文件夹,可以如下操作
==>菜单栏-->工具-->文件选项-->查看-->显示隐藏的文件,文件夹和驱动器(勾选上)-->点击确定
==>git管理我们的文件夹以后,会把我们的文件夹划分成三个区域
==>工作区:就是我们能看见的写代码的地方
-->git管理的代码,默认都是git管理的对象
-->git忽略的代码设置,如下操作
+ 项目的根目录新建一个文件: .gitignore
+ 哪些内容需要忽略,就在里面书写路径,我要忽略node_modules文件夹
+ 就在里面写node_modules
==>暂存区:就是形参一个历史版本
==>本地仓库:历史版本的存放区域
==>查看git管理的文件信息
==>指令: git status
==>git不管理空文件夹
==>如果希望保留空文件结构,必须在文件夹里面有文件
==>我在空文件里面建立文件,但是又要表明这个文件没有实际左右,只是为了保留文件夹结构
==>所有一般这种文件叫做: .keepgit
暂存区
在这里的代码形成一个历史版本
1 正常流程: 代码从工作区==>暂存区
==>指令:
-->git add 要放到暂存区的文件名
-->git add 要放到暂存区的文件夹名/
-->git add --all 把工作区所有git管理的文件都放到暂存区
-->简写:git add .
==>工作区文件除非手动删除,不会消失
==>可以通过指令: git status 查看文件状态
-->Untracked files:在工作区还没有添加到暂存区的文件
-->Changes to be committed:已经添加到暂存区的文件
==>git diff:可以查看工作区文件和暂存区文件的区别
2 后悔操作:代码从暂存区==>工作区
==>指令:
-->git rm --cached 要删除的文件名 ==>作用:从暂存区删除文件
-->git checkout -- 文件路径 ==>作用:拉取暂存区文件,并将其替换成工作区文件
==>运行完成以后,通过git status查看文件状态
本地仓库:历史区
==>就是把我们暂存区里面的文件变成一个历史版本
==>当一个文件形成一个历史版本以后,就会一直被记录下来
==>如果要形成一个历史版本,文件一定要从暂存区来
==>因为历史区就是把暂存区的内容收录进来
指令:把暂存区文件变成一个历史版本,放到本地仓库里面
==>git commit -m "本次提交的历史版本的详细描述"
指令:查看历史版本
==>git log ==>查看当前版本及其前面的版本
==>结果是这个格式:
commit 196032d6aeb9cb233827b779aa792f6f21def92c (HEAD -> master)
Author: cyr <260464538@qq.com>
Date: Fri Aug 21 11:35:07 2020 +0800
第一次提交的版本,a.txt里面是hello world
==>版本号:196032d6aeb9cb233827b779aa792f6f21def92c
==>作者信息:cyr <260464538@qq.com>
==>提交的时间:Fri Aug 21 11:35:07 2020 +0800
==>版本描述信息:第一次提交的版本,a.txt里面是hello world
==>HEAD表示当前最近的一个版本
==>git reflog ==>查看所有版本
指令:版本回退,就是把本地仓库的一个可以查看的版本恢复到工作区
==>git reset --hard Head 回到最新版
==>git reset --hard Head^ 回到最新版的前一个版本
==>git reset --hard 版本号 回到指定版本
后悔操作
+ 指令:查看工作区文件和暂存区文件的区别
==> git diff
+ 指令:查看本地仓库文件和暂存区文件的区别
==> git diff --cached
+ 案例1:拉去最近一次提交到本地仓库的文件到暂存区,该操作不影响工作区
工作区:a.txt 里面的内容是33333
暂存区:a.txt 里面的内容是33333 (指令执行完有,暂存区的a.txt变成22222)
本地仓库:a.txt 里面的内容是22222
==>指令: git reset HEAD -- 文件路径
+ 案例2:撤销上一次提交,并将暂存区文件重新提交
==>当前已经提交了版本三,但是这个版本有问题,就需要撤销这个版本
==>指令: git commit --amend -m "本次提交的版本是用于覆盖版本222222"
分支操作
==>创建分支:
==>指令: git branch 分支名
==>删除分支:
==>指令: git branch -d 分支名
==>查看分支:
==>指令: git branch
==>切换分支:
==>指令: git checkout 分支名
==>合并分支:
==>指令: git merge 要合并的分支名 -m "新版本的详细描述"
举例:
==>初始版本在master分支上
==>以版本一为起点
==>创建zhangsan分支和lisi分支
-->git branch zhangsan
-->git branch lisi
==>查看创建的三个分支
-->git branch
==>切换到zhangsan分支
-->git checkout zhangsan
==>以最新版本恢复工作区
-->git reset --hard Head
==>zhangsan分配到的任务是完成pages里面的login.html
==>zhangsan完成任务以后在自己的分支保存新版本:zhangsan-login
-->git add .
-->git commit -m "zhangsan-login"
==>切换到lisi分支
-->git checkout lisi
==>以最新版本恢复工作区
-->git reset --hard Head
==>lisi分配到的任务是完成pages里面的cart.html
==>lisi完成任务以后在自己的分支保存新版本:lisi-cart
-->git add .
-->git commit -m "lisi-cart"
==>切换回到主分支master
==>git checkout master
==>先合并zhangsan分支
==>git merge zhangsan
==>合并完成以后删除zhangsan分支
==>git branch -d zhangsan
==>先合并lisi分支
==>git merge lisi -m "本次版本的详细信息"
==>合并完成以后删除lisi分支
==>git branch -d lisi
分支冲突
+ 初始化一个仓库
-->git init
+ 创建一个项目的初始版本
-->git add .
-->git commit -m "init"
+ 创建zhangsan分支和lisi分支
-->git branch zhangsan
-->git branch lisi
+ 切换到zhangsan分支
-->git checkout zhangsan
-->git reset --hard Head
-->可以对a.txt做一些操作,比如改成hello zhangsan
-->提交本次版本
-->git add .
-->git commit -m "hello-zhangsan"
+ 切换到lisi分支
-->git checkout lisi
-->git reset --hard Head
-->可以对a.txt做一些操作,比如改成hello lisi
-->提交本次版本
-->git add .
-->git commit -m "hello-lisi"
+ 切换到master分支
-->git checkout master
-->先合并zhangsan分支
-->git merge zhangsan
-->git branch -d zhangsan
-->再合并lisi分支
-->git merge lisi
-->git branch -d lisi==>执行到这个步骤的时候,出现了版本冲突
-->需要手动修改a.txt这个冲突文件,然后提交这个修改好的版本
-->git add .
-->git commit -m "新版本的描述信息"
常用的分支命名
+ master 主分支:永远只存储一个可以稳定运行的版本,不能在这个分支上直接开发
+ develop 主要开发分支,主要用户所以功能开发的代码合并,记录一个一个的完整版本
==>包含测试版本和稳定版本
==>不要在这个分支上进行开发
+ feature-xxx:功能开发分支,从develop创建的分支
==>主要功能是某一个功能的开发
==>以自己功能来命名就可以,例如:feature-login/feature-list
==>开发完毕以后,合并到develop分支上
+ feature-xxx-fix:某一个分支出现bug以后,在当前分支上开启一个fix分支
==>解决完bug以后,合并到当前功能分支上
==>如果是功能合并之后发现bug可以直接在develop上开启分支
==>修复完以后合并到develop上
+ hotfix-xxx:用于紧急bug修复
==>直接在master分支上开启
==>修复完毕以后合并到master
远程仓库:github
==>注册一个github账号
==>登陆成功,在界面的右上角有一个+的符号,点击选择new repository
==>填写远程仓库的信息
==>Repository name: test2005==>点击按钮:create repository
==>弹出的页面中
==>远程仓库地址:https://github.com/cyanrui/test2005.git
==>在本地仓库创建好版本信息
1 git init
2 git add .
3 git commit -m "版本信息"
==>给远程仓库取一个好记忆的名字
git remote add 名字 远程仓库地址
==>把本地仓库提交到远程仓库
git push -u 名字 master
==>提交成功以后去: https://github.com/cyanrui/test2005.git 查看
==>下载远程仓库到本地
==>如果你的电脑从来没有下载过这个仓库,就使用git clone 远程仓库地址
==>如果你的电脑已经下载过这个仓库,但是版本可能不是最新版,就使用git pull来拉取最新版,版本合并
==>如果你的电脑已经下载过这个仓库,但是版本可能不是最新版,就使用git fetch来拉取最新版,不会进行版本合并