Git(IDEA版)
Git(IDEA版)
第1章Git概述
Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
Git易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion等版本控制工具。
1.1何为版本控制
版本控制是一-种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
这里已经有了一个版本控制的思想,但是只是简单做了一个副本的复制。
1.2为什么需要版本控制
个人开发过渡到团队协作。
1.3 版本控制工具
集中式版本控制工具
CVS、SVN(Subversion)、 .......
集中化的版本控制系统诸如CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工
作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。每个人都可以在一定程度上看到项目中的其
他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各
个客户端上维护本地数据库来得轻松容易。事分两面,有好有坏。这么做显而易见的缺点是中央服务器的单点故障。
如果服务器宕机一小时,那么在这一小时内, 谁都无法提交更新,也就无法协同工作。
虽然在这一个小时之内,你可以把代码下载到本地进行修改,但是你修改之后不能进行版本控制,修改之后完全没有意义!因为没有办法提交更新。
分布式版本控制工具
像Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
- 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)。
- 每个客户端保存的也都是整个完整的项目( 包含历史记录,更加安全) 。
每个人在自己本地库里面做修改。
代码托管中心远程库。远程库里面的代码永远都是最新的。
1.4git的历史
1.5git的工作机制
-
把编写完的代码add到暂存区。
-
暂存区的代码一旦提交到了本地库就会产生历史版本,一旦产生历史版本,这个代码就删不掉了。
1.6git和代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。
- 局域网
- gitlab(基于局域网)
- 互联网
- GitHub (外网)
- Gitee码云(国内网站)
第2章Git安装
省略部分安装步骤,需要观看https://www.bilibili.com/video/BV1vy4y1s7k6?p=7&spm_id_from=pageDriver
git的命令行客户端放大: 按住ctrl + 滚轮
输入git -- version
可以查看当前的git的版本号
第3章Git常用命令
命令名称 | 作用 |
---|---|
git config --global user.name 用户名 | 设置用户签名 |
git config -global user.email邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add文 件名 | 添加到暂存区 |
git commit -m“日志信息”文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset --hard 版本号 | 版本穿梭 |
这里的邮箱并不是实际的邮箱,只是一个虚拟的邮箱,git并不会去验证它。
这里我们设置一下用户名和邮箱,可以在我们当前目录的用户的文件夹下面发现一个.gitconfig
文件
打开之后能够明显的看出来刚才我们设置的内容
说明:
签名的作用是区分不同操作者身份。用户的签名信息在每--个版本的提交信息中能够看
到,以此确认本次提交是谁做的。Git首次安装必须设置一下用户签名,否则无法提交代码。
※注意:这里设置用户签名和将来登录GitHub (或其他代码托管中心)的账号没有任何关系。这里只是代表我们本地git的一个客户端!
3.2初始化本地库
如果你要初始化这个本地仓库首先需要获得这个本地库的管理权。
添加暂存区:
git init
这里面的目录一般情况下不要去修改它,如果修改之后可能会导致git无法使用。
3.3查看本地库信息
3.3.1首次查看(工作区没有任何文件)
因为这里的.git文件是一个隐藏文件,所以输入ll显示文件数目为0
但是当我们进到这个本地库里面,可以发现这个本地库里面的确是生成了文件的
查看git 现在的状态
使用命令 git status
3.3.2新增文件
在git里面可以随便使用linux的命令里面的,因为他们都是Linus开发的。
提交文件git add 文件名
3.2.3再次查看(检测到没有追踪的文件)
这里输入命令 git add 文件名代表这个文件被存到了暂存区里面
- Uinx/Linux:采用换行符LF表示下一行(LF:LineFeed,中文意思是换行);
- Dos和Windows:采用回车+换行,CRLF表示下一行(CRLF:CarriageReturnLineFeed,中文意思是回车换行);
如果想从暂存区里面删掉hello.txt就使用命令git rm --cached hello2.txt
这个删除只是将暂存区里面的文件删除了,并没有删除我们电脑文件中的这个文件。但是这次我们再次git status之后就会显示我们没有追踪过它了。
3.3提交本地库
3.3.1将暂存区的文件提交到本地库
基本语法
git commit -m "日志信息" 文件名
再次提交之后显示
3.4修改文件
当我们修改了文件再次查看本地库的状态可以看到这个文件被修改了modified
然后输入 git add hello2.txt将文件添加到暂存区,但是只添加到暂存区不行还需要添加到本地库。git commit -m就可以添加到本地库了。
这里注意:因为git是按照行来维护文件的,因为修改了一行并没有办法去表达出来,只能把我们修改之前的那一行给我们删掉然后我们新增的那一行再增加出来,所以这里会显示
1 file changed, 2 insertions(+), 1 deletion(-)
这里提交完成之后我们再次查看本地库信息,可以发现这里又是干净的了!
3.5查看日志
git reflog
想要查看更加详细的日志信息就输入:
git log
这样可以查看提交日志的详细信息。
并且这个命令查看到的版本号是完整的版本号,我们之前在reflog里面得到的版本号是精简版的版本号,只有前七位的版本号。
3.6版本穿梭
首先使用git reflog可以查看到有多个版本号,这个我们可以知道这些文件有几个版本号
通过这个版本号可以穿梭回指定id的版本
点开.git 文件夹的内容,可以发现一个head文件,打开这个head文件可以看出来
当前指针指向我们当前的目录,我们当前在master目录下面,我们现在所在master的哪个分支版本我们需要查看.git/refs/heads
这个目录可以找到master这个目录:
这里可以看到我们现在的版本号是
综上所述可以看出我们现在所在master这个分支,而master这个分支又指向了7bfb24这个版本。
git切换版本,并不是复制粘贴副本,而是在内存里面存了许多日志信息,底层其实是移动的HEAD指针来切换不同的版本信息,具体原理如下图所示:
第4章Git分支操作
4.1什么是分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也是指针的引用)。
4.2分支的优点
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败, 不会对其他分支有任何影响。失败的分支删除重新开始即可。
4.3分支的操作
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
查看分支名
git branch -v
创建分支hot-fix:
git branch hot-fix
此时这时候查看分支可以发现有两个分支
修改分支切换到hot-fix:
git checkout hot-fix
这次我们在hello2.txt上进行修改,可以看到这里
进行添加和提交
我们可以明显的看到这个head现在就是指向了hot-fix里面的这个版本。
合并分支