git是什么?
Git是一个分布式版本控制系统,用于管理源代码的变更。它允许多个开发者在同一个项目上协作,同时跟踪每个修改的历史记录。
关键词:
- 分布式
- 版本控制
- 软件
软件
安装到我们电脑上的一个工具
版本控制
例如论文,论文不断修改,有论文1.0,论文2.0,论文3.0,论文最终版本,对我们的论文版本进行管理,版本控制的发展历程如下:
1. 早期阶段(1960s-1970s)
- 源代码管理的萌芽:在1960年代,随着计算机程序的复杂性增加,开发人员开始寻找管理和跟踪代码变更的工具。最早的版本控制系统是在大型机环境中手动管理的,通常通过备份、文件命名约定和文档来完成。
2. 控制系统的出现(1970s-1980s)
- RCS与SCCS:1970年代,BSD(伯克利软件分发版)引入了SCCS(Source Code Control System),这是第一个自动管理源代码版本的软件系统。RCS(Revision Control System)随后出现,为版本控制提供了一种更为简洁有效的方法。
3. 传统集中式版本控制(1980s-2000s)
- CVS和Subversion:在1990年代,CVS(Concurrent Versions System)成为最普遍使用的版本控制系统。它允许多个开发者并行协作,并具有冲突解决机制。随后,Subversion(SVN)在2000年推出,解决了CVS的一些缺陷,如缺乏对二进制文件和目录版本控制的支持。
4. 分布式版本控制的兴起(2000s-现在)
- Git的出现:2005年,Linus Torvalds开发了Git,标志着分布式版本控制的新时代。Git允许每位开发者都拥有完整的代码库副本,从而极大地提高了协作效率和灵活性。
- Mercurial:与Git同年推出的Mercurial也是一款流行的分布式版本控制工具,但其设计上更加注重简洁和易用。
5. 社区和平台的繁荣(2010s-现在)
- GitHub和GitLab的发展:随着Git的流行,GitHub(2008年)和GitLab等平台兴起,使开源项目和团队协作更加便捷。它们提供了图形化界面和集成的代码审查、问题跟踪和持续集成等功能。
为什么要做版本控制?
-
历史记录和追踪更改:版本控制系统(如 Git)能够记录每一次更改,可以轻松查看和恢复到以前的版本。这对于 bug 修复和回退到稳定版本非常有帮助。
-
协作:在团队环境中,版本控制允许多个开发者并行工作而不会互相干扰。它可以合并不同的代码更改,确保每个人的工作都能被记录和整合。
-
分支和合并:可以创建分支来开发新功能或修复问题,然后在完成后将其合并到主代码库。这使得实验和开发新特性变得更安全。
-
提高代码质量:通过版本控制,团队可以在合并代码之前进行代码审核,确保代码的质量和一致性。
-
文档化过程:版本控制系统会记录谁何时做了什么更改,提供了良好的文档化,使得项目管理和审计变得容易。
-
解决冲突:当多个开发者同时修改同一部分代码时,版本控制可以帮助识别和解决冲突,确保最终代码的完整性。
-
环境管理:版本控制可以帮助管理不同的开发和生产环境,确保源代码和配置的一致性。
git安装
这里我就不演示了,下面的链接有详细讲解了如何安装以及环境的配置
版本控制的操作顺序
-
进入要管理的文件夹
选择我们要进入的git_learn文件
然后管理aa.py文件 -
初始化(提名,让别人知道你就是老大)
git init#进行git的初始化
git status#检测当前文件夹下的状态
-
管理
git add aa.py#执行这一段代码就是让git管谁
能够发现,git add 文件后,该文件变成了绿色
git add .#会将该目录下的所有未被管理的文件,都进行管理
-
生成版本
git commit -m '生成第一个版本v1'
此时git已经将当前版本的文件生成一个版本了。
如果我在上一个版本上修改了我的aa.py文件

这个时候aa.py文件在上一个版本中,进行了修改,接下来还是将修改的文件加入管理,并且生成版本
git add .
git commit -m 'v2'

如何查看生成的记录呢
git log

个人信息配置:用户名、邮箱[配置一次即可]
git config --global user.email "邮箱"
git config --global user.name "Your Name"
git工作流程

我的评价!!!直接看东北热
如何回滚
git reset --hard 输入要回滚的序列号

如果想回到以前做过的一些版本可以使用
git reflog #查询回滚以前的功能

这里就可以看到回滚以前的版本,再用git reset --hard 输入要回到的版本
代码总结
git init #初始化,即让git帮我们管理当前文件夹
git status #检测当前目录下文件的状态
#三种状态(颜色)的变化
1.红色:新增的文件/修改了原来老文件 -》git add 文件名 .
2.绿色:git已经管理起来了 -》git commit -m '描述信息'
3.生成版本
git log 查看版本记录
git reflog
git reset --hard 版本号
三大区域

分支
初始分支

开发不同的功能,然后将不同的功能合并到一起。
基于分支修复线上bug的具体过程

主路线就是master
分支实例
先开发a1功能
git init初始化


git status # 查看状态

git add .#将未更新的版本加入更新


接下来开发a2功能


git log #查看版本记录

接下来上线商城功能


接下来创建短视频的功能
创建分支
理想分支如下,可以记下来

创建dev分路
git branch #查看分路
git branch "名字" #创建名为的分路

git checkout ""#要切换的分路名

在dev分支上开发短视频功能,完成50%时出现了bug


然后出现bug,返回master分支,创建bug分支


此时的代码回到了a3,然后进入bug分支

接下来,修理商城代码的bug


接下来将bug的代码和master的代码进行合并
git merge "分支"#合并你的分支
git branch -d "选择你要删除的分支"
先返回master分支

合并完成后删除bug分支


接下来前往短视频系统继续开发


最后将短视频功能合并到master

出现上述代码就是要调整代码,处理业务冲突

先对修改好的代码进行上线,再删除dev分支

工作流

做开发至少要有两个分支
一个是master分支
一个是dev分支,所有的开发都在dev分支上进行
github
基于github做代码托管
创建新的仓库

如何上传代码,以及如何克隆代码
git remote add origin 远程仓库地址 #给远程仓库起别名
git push -u origin 分支 #向远程推送代码
git clone 远程仓库地址 #克隆远程仓库代码(内部已经实现了起别名)
git checkout 分支 #切换分支