一、git版本控制——解决的三个痛点问题/作用
1.解决虚拟机意外坏了/磁盘损坏等意外情况
2.版本持续变化,需要对很多个版本进行管理
3.能够方便多人进行协同开发
建议:使用centos7(centos6中git版本太低)
注意:git与linux作者相同
二、git版本控制的特点
1.分布式
2.远端仓库
3.分支管理
4.标签管理
5.使用项目代码托管平台
7.git命令行
三、git的安装
centos7:
sudo yum -y install git
centos6:
https://gitee.com/HGtz2222/EasyVimConfig#%E6%BA%90%E7%A0%81%E5%AE%89%E8%A3%85-git
四、git与github
git:版本控制工具(同类工具:svn,hg,vsc...),git 本质上不依赖任何的第三方网站,配合github/码云使用效果更佳
git相关操作:
github:全球最大的同性社交网站,source forage,goole code,gitlab,码云,码市
五、git的使用
1.创建项目
2.克隆/下载,在出现框复制HTTPS下的链接
3.打开linux命令行 使用命令 git clone +HTTPS链接
4.打开目录
5.三板斧操作
(1)git add + 目录名——告诉git工具那些文件需要版本控制的
(2)git commit . ——提交当前目录下的所有文件,把代码的改动提交到版本控制中
注意:1.此时的提交是提交到本地,而不是提交到服务器上
2.提交的时候需要写一个比较有描述性的日志信息。(一定要认真写!!)
(3)git push +url (HTTPS下的链接)——把本地的修改推送到服务器上
注意:每次提交可能需要提交用户名密码,可以设置面除这些操作,就进行推送
六、git进阶用法——git的其他常用操作
1. pull
git pull——从服务器上拉取代码到本地
2. diff (查看那些代码发生修改的详细内容)
git diff——罗列出当前目录下有哪些代码发生了改变 ---a旧版本 ---b新版本(代码没有push前)
3. status
git status——查看那些代码发生修改,不包含详细信息
4. log
git log——查看修改的版本日志,打印出之前的每一次改动(版本信息)
5. checkout
git checkout —— 不加参数,表示切换分支
6.配置免密码提交
7.配置 .gitignore —— 一个非常有用的东西,提示git要忽略那些文件
git add * 将所有文件关联到 git,通过 .gitignore 配置文件忽略
vim .gitignore (. 开头表示隐藏文件) 在文件写 *.o —— 表示忽略.o文件
七、版本管理——版本回退
1.git log —— 显示版本详细信息
git log --pretty=oneline — 每个版本占一行,简易版本信息,前面的一串很长的数字表示版本号
注意:此处版本号通过SHA1计算得出
两个主流的哈希算法——MD5、SHA1
特点(流行的原因):
(1)算出来的哈希值一定是定长的
(2)得到的哈希值冲突的概率极小,其分布的非常均匀,降低了冲突概率
(3)MD5不可逆,即拿到哈希值得到原字符串基本不可能
2.版本回退
git reset --hard + 版本号 —— 回退回指定的版本
问题:
(1)回退的时候最新版本的信息看不到了,怎么办?
git reflog —— 记录了git 在本地的核心操作,可以借助 reflog 来找到 git log 看不见的版本
git reset --hard + 版本号
版本回退的原理:
八、分支管理
1.分支的概念
举例:
背景:100多人维护同一份代码(代码千万行)
假设:这个代码在服务器上只有一份,每个人都会把自己的改动提交到这个服务器的这份代码上
有一天,小明提交了一次代码,提交之后,下班回家,并请了两天假,其他人更新了代码,编译不过。就会导致出现一些严重的问题。
分支就是为了解决这个问题,小明在开发代码的时候,基于服务器上的这一份代码,创建一个分支(也就是将服务器上的代码拷贝了一份)。小明自己创建的这个分支,成为开发分支(dev),服务器上原来的这份代码称为主线(master)。后序小明把代码提交到dev分支上,不会对 master 进行任何影响。直到小明代码开发完,测试完,再把 dev 分支的代码合并到 master。
2.创建分支
git branch —— 完成对分支的操作,如果不加其他参数,表示查看当前有那些分支(其中 * 表示当前分支是谁)
(1) git branch + 分支名字 —— 表示创建一个分支,该分支只是在本地创建一个指定名字的分支
(2) git checkout + 分支名 —— 切换分支
合并上述两步操作的命令(创建并切换分支):
git checkout -b + 分支名
-b 选项,创建分支并切换到新分支
3.分支合并
git merge + 分支名
合并时的重要问题:冲突
(1)什么是冲突?
同一个位置的代码,在不同的分支中都被进行了修改,此时尝试merge两个分支,就会产生冲突
git commit -a ——强制合并
(2)工作中发生冲突,怎么解决?
与相关开发人员沟通,确定代码怎么写。
4.删除分支
git branch -d + 分支名 —— 删除分支
(-d 分支名字,删除分支)
九、分支管理策略
1.Fast forward —— 通过一个HEAD指针指向回退的版本
注意:删除分支之后,会丢掉分支信息
2.bug分支——描述一种场景
实际开发中常见的应用场景:
场景一:开发一个功能,创建 dev 分支,在这个 dev 分支上开始开发,开发到一半的时候,master上发现存在一个bug,需要立刻修复。如果此时的dev分支是多人共用,此时我们就不能把当前dev分支中修改一半的代码提交上去。
如果直接尝试切换到master,就会出现切换失败的情况。
git stash —— 能够临时保存当前的修改内容,让我们去及时的处理其他的分支的情况
git stash pop —— 恢复之前保存的修改的内容
git stash list —— 随时可以查看保存的内容,并指定要恢复保存的内容
场景二:假设你在开发一个需求,马上要开发完了,产品经理说,这个需求不做了,此时修改的这些代码,不需要合并到master分支中。
用过的分支可以删掉,首先要切换到其他分支。
git branch -d + 分支名
此时会报错,提示该分支没有merged,如果确实要删除,使用下面的命令:
git branch -D + 分支名 强制删除
场景三:多人合作开发
1.直接基于master开发(在实际工作中是严格禁止的)
(1)拉取代码 git pull ,(2)merge,(3)有冲突解决冲突,(4)commit ,(5)push
2.基于共同的dev分支来进行开发
git push origin + 分支名 —— 同步分支到服务器上
git checkout -b + 分支名 origin/分支名
十、标签管理——版本发布(需要对代码进行发布版本)
1.概念
使用 标签 机制告诉我们哪份代码是需要进行发布的,一般不会直接发布 master 上的最新代码。
2.标签的相关操作
git tag + 标签名 —— 创建标签名(在本地创建标签)
git push origin + 标签名 —— 将标签名推送到 git 服务器上
git tag —— 不加参数,表示查看都有哪些标签
删除标签:
git tag -d + 标签名 —— 删除本地标签
注意:最好别删服务器上的标签,删除标签的风险极大,尽量避免删除服务器上的标签