目录
- 1、Git介绍
- 1.1git是什么工具
- 1.2git起到的作用
- 1.2.1 个人开发:
- 1.2.2 多人开发:
- 2、Git安装与下载项目代码
- 2.1 下载安装git
- 2.2 从仓库下载代码
- 3、创建仓库及提交代码
- 3.1 创建仓库
- 3.2 将本地代码以及文件提交到远程仓库
- 3.2.1git全局配置
- 3.2.2 远程仓库和本地机器的连接
- 3.2.3 上传代码
- 4、提交多次代码如何查看之前代码
- 5、git入门总结
- 5.1 团队开发遇到什么样的问题?
- 5.2 svn和给git的区别
- 6、git详细命令
- 6.1 初始化仓库
- 6.2 查看配置
- 6.3 查看状态
- 6.4 添加到暂缓区
- 6.5 添加到分支
- 6.6 查看修改文件
- 6.7 查看修改历史
- 6.8 查看修改历史(简单形式)
- 6.9 版本回退
- 7、多人开发解决冲突问题
- 8、分支操作
- 8.1 查看本地分支
- 8.2 新建分支
- 8.3 切换分支
- 8.4 查看远程仓库分支
- 8.5 本地分支提交到远程仓库
- 8.6 删除本地分支
- 8.7 删除远程仓库的分支
- 9、合并分支
- 9.1分支是独立的,不会互相影响。
- 9.2 合并分支
- 10、Gitflow工作流
1、Git介绍
1.1git是什么工具
git是一个版本工具
版本如何理解呢?
如v1.0.0==>v1.0.1==>v1.0.2,版本就是一个更新迭代的变化。
举个例子:如果v1.0.2版本有严重的bug,而v1.0.1没有,你可以轻松的下载之前没有bug的版本。
这就是版本的控制。
1.2git起到的作用
比如你在公司里开发一个项目,只有你一个前端或者多个前端。
1.2.1 个人开发:
打个比方你开发一个项目要30天,你每天下班前都将代码保存到本地,第一天、第二天、第三天、第四天、第五天…突然有一天你的电脑坏了,里面的文件全被删除,并且不可逆转,那你之前所写的代码所花费的时间是不是都浪费了?
当然可能会有人说,我每天将数据存到一个u盘或者硬盘里不也可以,这其实也行,但是如果你哪天去上班忘了带u盘或者硬盘,那么你该如何进行项目推进?这也是一个问题。
1.2.2 多人开发:
一个项目可以需要多个前端进行开发,这个哥们负责哪几个页面,那个哥们负责哪几个页面,你负责几个页面,每天当要下班了是不是要对代码就行汇总,那么怎么汇总呢?难道是这个哥们和那个哥们把代码拷贝过来,然后和你写的代码一起保存?
这汇总可能会出现错误,比如命名错误,文件夹名称相同,会出现覆盖等等情况。
为了解决这些问题,我们就需要用到git版本控制工具。
一般我们在做项目的时候,第一步都会现在远程服务器创建一个仓库,比如GitHub、码云…。
每天下班前将代码上传到仓库里,就算你换了电脑,去远方出差,我们可以直接从仓库中拉取克隆到本地,无需在用u盘那样麻烦。
在多人开发,如果发生错误等等,我们可以直接回退到之前的版本。
总的来说:git在项目中起到的作用就是:代码管理、上传、下载、版本回退等等…
可以去官网看看git和其他版本控制的区别:https://www.git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-Git-%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F
2、Git安装与下载项目代码
2.1 下载安装git
官网:https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git
里面有详细下载教程,我就不多说了。
在安装完后,我们在桌面右键:会多出git GUI Here和Git Bash Here
说明一下我是window操作系统。
还可以在终端测试是否安装成功:
2.2 从仓库下载代码
国内:码云
网址:https://gitee.com/chinaio
国外:GitHub
网址:https://github.com/
以码云为例:
我们在码云找到一个项目
右侧有一个克隆/下载
我们复制该链接或下载ZIP。
以复制链接为例:
新建一个文件夹,右键,点击Git Bash Here:
进入命令行:输入git clone ,然后右键Paste粘贴刚才在码云复制的链接
回车,开始下载
下载完毕。
3、创建仓库及提交代码
3.1 创建仓库
以码云为例:
1、访问到码云平台:https://gitee.com/chinaio
2、注册==》登录账号
3、登录后==》新建仓库
新建仓库:
设置一些仓库信息(勾选了初始化仓库):
建立成功:
不勾选初始化仓库,建立后是这样的:
官方建议在建立仓库时进行初始化。
3.2 将本地代码以及文件提交到远程仓库
3.2.1git全局配置
第一次必须配置全局变量,本地git和你的账户密码进行关联。
git config --global user.name "东方青云"
git config --global user.email "2114683298@qq.com"
user.name是你注册账号时的用户名
user,email是你注册账号时的邮箱
3.2.2 远程仓库和本地机器的连接
如果你使用SSH一定要配置ssh公钥,如果是HTTPS则不用。
如果你有很多账户,那么git该提交到哪个账户呢?
SSH公钥的主要作用就是你本地仓库和远程服务器上登录的账户进行一个连接
设置:
找到ssh公钥:
点击怎样生成公钥:
地址:https://help.gitee.com/base/account/SSH%E5%85%AC%E9%92%A5%E8%AE%BE%E7%BD%AE
里面有具体步骤,我就不写详细说明了。
3.2.3 上传代码
提交所有代码到中转站
git add .
提交所有代码到本地仓库
git commit -m '注释内容'
提交本地仓库到码云
git push
4、提交多次代码如何查看之前代码
举个例子(这个荔枝可好吃了):
在我们开发项目的过程中,目前下面这个项目提交了36次,如果在第36次提交的代码中有严重的bug,我们想退回到之前的版本,用git就能够很好的解决。
我们点击第36次提交:
进入到统计页面:
点击你想回退版本右侧的浏览文件:
点击下载ZIP,不要使用克隆,克隆的是最新版本,而ZIP则是此次浏览的版本文件。
5、git入门总结
5.1 团队开发遇到什么样的问题?
- 备份多个版本,费时间,费空间、
- 难以恢复到以前的版本
- 难以解决代码冲突问题
- 难以追溯问题以及修改人和修改时间
- 无法进行权限控制
使用git能够很好的解决这些问题。
除了git可以进行版本控制,还要很多版本控制工具,如svn。
5.2 svn和给git的区别
svn是集中式管理,而git是分布式管理。
怎么理解集中式和分布式呢?
简单来说集中式就是如果没有网络就无法提交上传代码,而分布式则可以先暂存到本地(git add . ,git commit -m ‘暂存’),等有网了在上传到远程服务器。
可以去官网看看git和其他版本控制的具体区别:https://www.git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-Git-%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F
6、git详细命令
6.1 初始化仓库
git init
6.2 查看配置
git config -l
在我们进入公司做项目,必须配置user,email和user.name
6.3 查看状态
git status
红色的表示没有被git管理
绿色的表示存储在版本库暂缓区
6.4 添加到暂缓区
git add .
.代表所有文件
指定某个文件 git add index.js
6.5 添加到分支
git commit -m '注释内容'
6.6 查看修改文件
git diff
查看某一个文件:git diff index.js
查看所有文件: git diff
6.7 查看修改历史
git log
使用这个命令就能够清除的看见谁哪个时间修改了文件,
6.8 查看修改历史(简单形式)
git reflog
6.9 版本回退
可以直接在本地进行版本回退,很多版本都会在本地进行存储一份。
回到上一个版本:
git reset --hard HEAD^
回到指定版本:
git reset --hard 版本号
箭头所标即是版本号。
7、多人开发解决冲突问题
我来模拟一下二人开发过程:
创建两个文件夹(两个人):
他们二人都克隆下载代码
在进行项目开发前,各自都需要配置一下啊(局部,之前配置的global是全局的)
git config user.name '用户名'
git config user.email '邮箱'
张三新增了一个index.js文件
我们进行上传:
远程仓库已经提交成功:
此时我们的李四也新增了一个文件,common.js文件,然后进行提交
进行push报错,这是为什么呢?
如果远程仓库有人更新了代码,那么我们不能直接的去git push。
解决:
我们必须先把远程 仓库的代码下拉,然后再push
git pull
git push
下拉后,多了刚才张三提交的index.js文件
我们在git push,远程仓库已经更新。
新的问题:如果此时二人本地都要index.js文件,然后进行了不同层级的修改,导致代码不同,然后都提交远程仓库,会发生什么问题呢?
张三对index.js文件进行修改
此时李四对index.js文件进行修改。
我们提交一下,看看远程仓库是保留张三的内容还是李四的内容
代码冲突了,我们该如何解决,解决是比较繁琐的事情。
解决:
将报错乱码删除,删除后如果都想要直接提交即可,如果只想要其中某些代码,需要跟项目组进行协商,哪些代码需要保留,哪些不需要,然后在提交。
所以说写完代码尽快提交,后提交的人需要解决这些冲突问题,哈哈哈哈哈
8、分支操作
在git中,默认有一个主分支:master
一般来说在公司开发项目,每个人都有自己独属的分支,最后项目要上线了,统一将所有分支合并到主分支。
8.1 查看本地分支
git branch
8.2 新建分支
git branch 分支名称
8.3 切换分支
git checkout 分支名称
左边*
号表示当前所在分支
8.4 查看远程仓库分支
git branch -r
当前我们只在本地添加了分支,而远程仓库并没有添加。
8.5 本地分支提交到远程仓库
不能直接git push
正确提交:
git push --set-upstream origin 分支名称
由分支数量1变成了2,说明提交成功了。
8.6 删除本地分支
git branch -d 分支名称
如果你当前正在使用此分支,则无法删除,就像你在电脑上打开了一个文件夹一样,当前打开的文件夹不能进行删除。
我们切换一下分支,然后再进行删除。
8.7 删除远程仓库的分支
目前只是删除的本地分支,远程仓库的分支还存在。
git push origin --delete 分支名称
删除成功。
9、合并分支
9.1分支是独立的,不会互相影响。
我们在主分支master添加hhhh.js
文件
我们在创建一个新的分支dev。
根据上述所说,分支是独立的,不会互相影响,目前我们创立了新的分支dev,然后切换到了dev分支,可还是有hhhh.js文件,这是为什么呢?
其实分支是独立的,不会互相影响
这句话并没有错,只是不够完整。
如果在一个分支下创建另外一个新的分支,新的分支会继承旧分支之前的操作。
现在我们在dev分支添加一些代码,然后切换到master主分支,看看它的代码有没有变化。
主分支代码并没有发生变化,我们改变一下主分支的代码,然后切换到dev分支,看看dev分支下的hhhh.js
文件有没有发生变化。
dev分支下面的代码并没有发生变化。
9.2 合并分支
使用命令:
git merge 分支名称
merge本身的单词意思就是合并
如果当前是在master分支下写入:
git merge dev
,那么master和dev会进行合并,相当于master + dev ,也就是master += dev
合并失败,发生冲突,如何解决多人开发冲突问题,之前已经讲过了,我们再讲一次。
代码冲突了,我们该如何解决,解决是比较繁琐的事情。
解决:
将报错乱码删除,删除后如果都想要直接提交即可,如果只想要其中某些代码,需要跟项目组进行协商,哪些代码需要保留,哪些不需要,然后在提交。
解决完代码冲突后,在提交即可。
10、Gitflow工作流
gitflow一般用于中大型项目,我们讲下git flow的具体使用细节。
master //用于保存上线版本代码,创建了dev分支
develop //用于保存相对稳定版本的代码,所有的feature都是dev分支创建的
feature //用于开发某几个功能,不同的功能可能会创建不同的分支
release //用于代码上线前的准备(测试,bug修复),是dev创建的
bugfix //用于修复不紧急bug
hotfix //用于修复紧急bug
我来模仿三个角色,领导、开发1(张三)、开发2(李四)
首先领导先创建好一个仓库,然后在本地拉取代码,创建好分支。
创建本地develop分支
将本地分支提交到远程仓库
假如张三开发一个login页面,李四开发一个list页面,给他们创建好对应的分支。
将本地分支提交到远程服务器仓库
领导已经将分支建好,张三和李四开始进行开发。
张三:
第一步:克隆代码
第二步:进行局部配置
第三步:切换到feature/login分支
张三添加login文件
进行提交文件
此时远程仓库的feature/login分支添加了login文件夹,其他分支是没有的。
接下来李四也要进行开发了。
第一步:克隆代码
第二步:进行局部配置
第三步:切换分支
李四添加list文件夹,然后进行提交。
远程仓库reature/list分支已经添加上了。
此时develop分支是什么都没有的,最后领导对分支进行合并。
合并结束:
git merge origin/featur/login
git merge origin/featur/list
git add .
git commit -m '注释内容'
git push
在develop合并完代码后,进入测试环节,测试人员进行测试,如果有问题,则在develop分支下创建release
分支。然后release
分支创建bugfix分支(修复不紧急bug),hotfix(修复紧急bug),在bug修复完后进行代码提交,没有问题后在release
分支对bugfix和hotfix分支进行合并,在切换到develop分支对release分支进行合并,最后没有任何bug后,在由master分支合并develop分支,然后上线。