文章目录
0. git常用命令速查
1. Git
1.1 什么是Git?
官网定义:
Git是一个免费的,开源的
分布式版本控制系统
,可以快速高效地处理从小型到大型的各种项目。
Git易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于SVN(Subversion)、CVS、Perforce和ClearCase等版本控制工具。
廉价的本地库:Git的本地库是放在本地电脑的磁盘上。
总结:git是一个项目管理工具,可以很方便的用来管理我们的代码。
Git官网地址
https://git-scm.com/
Git的logo
注:最左边是Git的logo,Git的logo是一个分叉,一个分支,体现了Git最强大的特性就是分支!!!最右边的英文描述 --everythint-is-local 翻译过来是 所有的东西都在本地
1.2 Git下载
git官网可以看到git的最新版本是2.45.2,点击Download for Windows,跳转到下载页面。
1.3 什么是版本控制?
版本控制是一种机制,可以记录文件修改的历史记录,从而让用户能够查看文件的历史版本,方便切换文件的版本。
生活中版本控制的例子:
-
下面是一个本科生的毕业论文,毕业论文目录下,有下面这些文件,开始写毕业论文了,新建了XXX毕业论文.docx文档,然后在里面写,写完了交给老师检查,一般论文没那么容易过,老师会嫌你这里写的不好,那里写的不好,把论文打回让你改,但是通常,是个正常人,就不会在原有论文的基础直接进行修改,因为你修改后的论文可能还比不上修改前的,所以我们通常会将上面的文档ctrl+c, ctrl+v,改个名字叫XXX毕业论文改1.docx,然后在XXX毕业论文改1.docx里面修改,改好了再给老师检查,老师还不满意,你又要 循环ctrl+c,ctrl+v,修改操作,直到老师满意。
-
这里就是利用了文件的多副本,做了一个版本控制。
1.4 为什么需要版本控制?
因为在公司不是单打独斗,从个人开发过渡到了团队协作(很多人共同开发一个项目)。
图片演示:
公司服务器有第1版的代码,里面有aaa bbb ccc ddd 三行代码,程序员觉得第一版的代码写的不好,从服务器把第1版的代码下载下来,然后在第二行bbb后面加了222,因为是团队协作,不只有小红一个人,在程序员小红下载的同时,程序员小蓝把第一版的代码下载到本地,在第4行ddd后面加了444,如果利用多副本的方式做版本控制,小蓝的代码很可能把小红修改后的代码给覆盖掉,所以我们需要像git这样的版本控制工具来合并这两个人修改的代码,把222和444都留下来。
1.5 集中式版本控制工具和分布式版本控制工具
版本控制工具分类
- 集中式版本控制工具:
SVN(Subversion)
、CVS、VSS…… - 分布式版本控制工具:
Git
,Mercurial、Bazaar、Darcs……
集中式版本控制的架构图:
集中式版本控制的理解:集中式版本控制有一个唯一的中央服务器,程序员通过客户端连接到中央服务器,下载代码到本地,本地修改完了,提交到中央服务器,中央服务器的代码是始终是最新的版本,a写了一份代码,v1提交到中央服务器,b从服务器把v1下载下来,写了一个v2,修改完,提交到中央服务器,c从服务器把v2下载下来,写了一个v3,修改完,提交到中央服务器。
好处:可以看到项目中的其他人正在做什么,管理员可以给不同的角色开放不同的权限,架构师,每个包,每个目录都有权限,而实习生,只有某些目录的curd权限,防止他把代码搞坏了。
坏处:存在单点故障问题。中央服务器宕机了,断电了,硬盘坏了,谁都不能提交代码,也就不能协同工作。
分布式版本控制的架构图:
分布式版本控制的理解:没有中央服务器的概念,版本控制是在本地做的,每个人从远程库下载的代码,都是整个完整的项目,
解决了集中式版本控制的单点故障问题,即使远程库宕机了,虽然不能提交代码,但是还是可以做版本控制,因为版本控制是在本地做的。
1.6 Git的工作机制
小故事:假如你是一个程序员,压力大,和几个朋友出去喝酒,喝多了,想发泄一下情绪,在代码里写了一句骂老板的注释。
- 如果你只是在工作区写代码,没事,第二天醒了,代码删了,老板不知道;
- 如果你不仅在工作区写代码,还把代码添加到暂存区,也没事,第二天醒了,代码删了,老板不知道;
- 如果你不仅在工作区写代码,还把代码添加到暂存区,并且把暂存区的代码提交到本地库,形成了历史版本,第二天醒了,删不了!你想把这个骂人的代码删了,如果骂人的代码版本是v3,只能在它的基础上修改,提交一个v4版本,如果老板不懂git,老板看不到,如果老板懂git,切换到v3版本,那这个时候你等着被辞退吧,哈哈哈😄。不过你可以把整个项目目录删了,简称删库跑路,不过这时候你等着被起诉吧!😄
1.7 Git安装
-
双击git安装包,进行安装。
-
查看GNU协议,直接点击下一步
-
选择git的安装位置
-
git选项配置,推荐默认配置,然后点击next
-
选择git开始菜单的文件夹,不用改,点击next
-
选择git的默认编辑器,建议用默认的vim编辑器,然后点击next
-
默认分支名设置,选择让 Git 决定,分支名默认为 master,下一步。
-
修改 Git 的环境变量,选第一个,不修改环境变量,只在 Git Bash 里使用 Git
-
选择可执行的ssh,选默认的就行,点击next
-
选择后台客户端连接协议,选默认值 OpenSSL,然后下一步
-
配置 Git 文件的行末换行符,Windows 使用 CRLF,Linux 使用 LF,选择第一个自动
转换,然后继续下一步。
-
选择 Git 终端类型,选择默认的 Git Bash 终端,然后继续下一步。
-
选择 Git pull 合并的模式,选择默认,然后下一步
-
选择 Git 的凭据管理器,选择默认的跨平台的凭据管理器,然后下一步。
-
其他配置,选择默认设置,然后下一步。
-
配置实验室功能,选择默认的,然后install安装即可。
-
正在安装,等待安装完成
-
出现如下界面,安装完成。view release notes,查看版本信息,不要勾选,点击finish结束即可。
18. 在桌面上右键,菜单出现 Open Git GUI here 和 Open Git Bash here,表示安装成功。
- Git GUI here:git的图形化客户端,界面丑几乎没人用
- Git Bash here:git的命令行客户端,通常都在用这个。
- 打开git bash here命令行客户端,通过ctrl+滚动鼠标滚轮可以跳转字体大小!
21.输入git --version,查看git的版本
1.8 Git常用命令
命令名称 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户签名 |
git config --global user.emial 邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库的状态 |
git add 文件名 | 添加到暂存区 |
git commit -m "日志信息" 文件名 | 提交到本地库 |
git reflog | 查看历史记录/历史版本 |
git reset --hard 版本号 | 版本穿梭/版本切换 |
说明:git的命令和linux的命令是通用的,因为他们都是linus开发的。
1.8.1 设置用户签名
第一次安装git,必须先设置用户签名,否则以后提交代码,会报错!
基本语法:
git config --global user.name 用户名
git config --global user.email 邮箱
说明:
- 用户签名是用户的身份证,每一个版本的提交信息中能看到用户的签名信息,来确定本次提交是谁提交的。
- 这里设置的用户签名和将来要登录github等代码托管中心的账号是没有任何关系的,用户签名只是客户端的一个标记。
如何验证用户签名设置成功
在windows的家目录下,查看.gitconfig文件的内容
可以看到刚刚设置的用户签名是保存在了这个文件中。
1.8.2 初始化本地库
在d盘下的Git-Space下,假如说这个下面有一个项目,创建一个目录,起个名字叫git-demo,要想git管理这个目录,获取目录的管理权,必须初始化本地库。
基本语法:git init
实操:
查看结果:
在D:/Git-Space/git-demo下生成了.git 的目录,.git是隐藏目录(浅色的目录,如果没有显示点查看->勾选隐藏的项目),这个.git目录就是git的本地库。
.git目录下有一些文件和目录,不要乱动!
1.8.3 查看本地库的状态
命令:git status
1、创建文件
在文件里输入i,进入输入模式,输入16行 hello git! hello java!,按 esc回到命令模式,按yy复制当前行,按p往下粘贴一行,粘贴完毕,按:wq保存并退出。
2、查看文件的内容:cat hello.txt
3、再次查看本地库的状态 git status
追踪文件:也就是将工作区的文件添加到暂存区。
1.8.4 添加暂存区
命令:git add 文件名
添加暂存区:将工作区的文件添加到暂存区,暂存区的文件是可以直接删掉的。
1、将hello.txt添加到暂存区
2、再次查看本地库的状态
3、删除暂存区的hello.txt
注意:删除hello.txt,只是删除暂存区的hello.txt文件,工作区的hello.txt还在!
4、再次查看本地库的状态
5、将文件重新添加到暂存区
1.8.5 提交本地库
提交本地库:将暂存区的文件提交到本地库,会形成历史版本,因为形成了历史版本,本地库的文件是不可以直接删掉的。
命令:git commit -m “本次提交的日志信息” 文件名
查看本地库的状态
1.8.6 修改文件
1、vim hello.txt 在第一行后面加上10个2
2、查看本地库的状态
3、添加到暂存区,然后提交到本地库
添加到暂存区
提交到本地库
查看版本信息
head 指针指向了第二个版本
查看文件的内容
4、vim hello.txt 在第二行代码的后面加10个3
查看本地库的状态,modified表示文件被修改了,hello.txt红色表示文件没有被添加到暂存区,添加到暂存区,查看本地库状态,变绿了,说明已经添加到暂存区了
**提交到本地库,查看本地库的状态,日志很干净了,说明已经被提交了本地库,查看版本信息,head指针指向了第三个版本。
**
查看文件的内容
1.7 切换版本(穿梭版本)
查看历史版本
命令:
git reflog:查看简略的版本信息。
git log:查看详细的版本信息。
git reflog:查看简略的版本信息,可以看到当前head指针指向master分支,master分支指向第三个版本third commit。
git log:查看详细的版本信息,不仅可以看到当前head指针指向master分支,master分支指向第三个版本third commit。
并且可以看到提交的版本,是什么人提交的,什么时候提交的,还会显示完整的版本号。
切换版本
命令:git reset --hard 想要切换版本的版本号
最新的第三版的代码写的不好,想切换到第二个版本,可以看到head指向master,master重新指向了9b8c00这个版本,也就是second commit 这个版本。
打开下面的HEAD文件和.git/refs/heads/master文件
head 指针指向了master分支。
master分支指向了9b8c000这个版本,也就是第二个版本。
切换版本,不仅能切换到前面的版本,还能切换到后面的版本。
现在切换到第三个版本。
master重新指向了e247e7e这个版本,也就是第三个版本。
查看文件的内容
切换版本的原理图
1.9 git分支
在企业级开发中,通常会有三种环境,开发环境,测试环境,生产环境,三种环境有对应的服务器,开发服务器,测试服务器,生产服务器。
1.9.1 什么是分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独
分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时
候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是
一个单独的副本。(分支底层其实也是指针的引用)
分支的好处
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败
的分支删除重新开始即可。
1.9.2 查看,创建,切换分支
分支的常用命令
分支的英文:branch
命令的名称 | 作用 |
---|---|
git branch -v | 查看分支 |
git branch 分支名 | 创建分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 将指定的分支合并到当前分支上 |
查看分支
含义:查看当前有哪些分支
命令:git branch -v (v 是 view:查看 的首字母
)
实操:
当前只有一个master分支,并且可以看到master前面有个*,说明当前在master分支上,git-demo右边(master)也能看出当前在master分支上。
创建分支
命令:git branch 分支名
实操:当master分支出现bug的时候,我们可以创建一个hot-fix分支(热修分支:紧急修复的一个分支),把bug解决一下,执行命令,没有任何提示。
查看分支,一共有两个分支:master分支和hot-fix分支
切换分支
含义:从当前分支切换当指定的分支。
命令:git checkout 分支名
实操:切换到hot-fix分支,修改代码,执行命令,提示已经切换到了hot-fix分支。
查看分支,当前一共有两个分支master和hot-fix,*在hot-fix前面,右上角git-demo右边是hot-fix都能说明,当前在hot-fix分支上。
修改hello.txt
查看hello.txt的内容
修改hello.txt,由于第一行10个2,第二行10个3,导致了程序界面卡顿,所以,把2和3数量都变成5个,然后:wq保存
查看本地库的状态
说明有文件被修改了。
将修改的文件添加到暂存区,查看本地库的状态,发现变绿,说明已经添加到暂存区了。
将暂存区的文件提交到本地库,发现两行代码被修改了,再次查看本地库的状态,发现提示信息变清爽了,说明已经提交到本地库了。
查看hello.txt的内容
查看本地磁盘上hello.txt的内容
查看HEAD文件,发现head指针指向了hot-fix分支
查看hot-fix文件,发现hot-fix指向173e031这个版本。
查看版本信息
发现head指针指向hot-fix分支,hot-fix分支指向173e031这个版本,也就是hot-fix first commit这个版本,第二行,提示已经从master分支移动到hot-fix分支。
1.9.3 合并分支
含义:将指定的分支合并到当前分支上。
命令:git merge 分支名
合并分支有两种情况,一种是正常合并,一种是合并产生冲突了,怎么合并,简称为冲突合并。
①正常合并
1. 切换回master分支,查看hello.txt文件的内容,还是10个2,10和3
2. 现在我想把hot-fix分支合并到当前分支(master分支),发现合并成功,提示两行代码被修改了,查看hello.txt文件的内容,发现变成了5个2和5个3
为什么这次合并是成功的,因为我master分支没有修改这个文件,hot-fix文件是基于master分支的文件修改了两行代码,所以合并过来,就是正常的修改,可以合并。
②冲突合并
1.10 团队协作
团队内协作
跨团队协作