git 版本控制系统

一、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 + 标签名 —— 删除本地标签

注意:最好别删服务器上的标签,删除标签的风险极大,尽量避免删除服务器上的标签

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值