Git
初识Git
Git简介
git是一个免费的、开源的分布式版本控制系统,可以快速高效的处理从小型到大型的各种项目。
版本控制工具
集中版本控制工具:CVS、SVN、VSS
优点:每个人都可以在一定程度上看到项目中的其他人在做些什么。管理员也可以轻松掌握每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来的轻松容易。
缺点:中央服务器的单点故障,如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
分布式版本控制工具:Git、Mercurial、Darcs
解决了集中式版本控制系统的缺陷
优点:服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
每个客户端保存的也都是完整的项目(包含历史记录,更加安全)
Git和SVN最主要的区别
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而在工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新版本,然后工作,完成工作后,需要把自己做完的工作推送到中央服务器,集中式版本控制管理系统是必须联网才能工作,对网络的要求比较高。
Git是分布式版本控制系统,没有中央服务器,没个人的电脑就是一个完整的版本库(存在安全隐患:跑路),工作的时候不需要联网了,因为版本都在自己的电脑上,协同的方法是:比如自己在电脑上更改了文件A,其他人也在电脑上更改了文件A,这时,你们俩之间只需把自己各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到修改了哪些文件!
代码托管中心
基于网络服务器的远程代码仓库,简称为远程库。
局域网
GitLab
互联网
GitHub
Gitee码云
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基本原理
Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage(Index))、资源库(Repository或Git Directory),如果加上远程的git仓库(Remote Directory)就可以氛围四个工作区域,关系如下:
初始化本地库
初始化的含义:获取当前目录的控制权
语法:git init
根据图片中我们可以看出在初始化后,自动为我们创建了一个.git的文件夹
查看当前本地库状态
语法:git status
On branch master:在当前分支上
No commits yet:当前还没有提交过任何文件
nothing to commit:没有可以提交的文件
在本地库中新建一个文件,再查看本地库状态
Untracked files:没有追踪的文件
添加暂存区(追踪文件)
语法:git add + 文件名
添加完成之后再次检查本地库状态:
可以发现刚才添加的文件已经显示在这里了,同时git还提醒我们,如果想要从暂存区删除这个文件可以使用git rm –cached 文件名,这个命令,注意:只是从暂存区删除掉了,工作区的文件还是存在的
提交本地库
语法:git commit -m “日志信息” 文件名
[master (root-commit) 3606b5b] first commit:在master分支上进行了第一次提交,3606b5b就是版本号
再次查看本地库状态
nothing to commit, working tree clean:没有可以提交的文件,工作树是干净的
查看版本信息
语法:git reflog
版本号(指针指向master分支)
语法:git log
更新版本
对hello.txt文件内容进行更新
语法:vim hello.txt,然后点击I键进入编辑模式,插入一行数字,然后点击ESC,冒号,wq保存并退出
再次查看修改文件后的本地库状态;
modified:表示该文件经过了修改,红色说明还没有将修改后的文件上传到暂存区,使用git add追踪文件就可以了,然后我们使用git status查看本地库状态就会发现modified变成了绿色
然后对暂存区的文件进行提交并查看本地库状态,发现指针指向了第二个版本
历史版本
版本穿梭
如果最新版本的代码不如上一版好,那么我们可以穿梭到想要回到的版本
命令:git reset –hard 版本号
这时我们会发现head的指向发生了变化,另外版本穿梭会影响工作区的文件,即工作区的文件内容会随着版本发生变化
分支
什么是分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行,对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。
分支的好处
1.同时并行推进多个功能开发,提高开发效率。
2.各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
分支的操作
命令名称 | 作用 |
---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
创建一个分支
修改分支
此时我们发现后面的(master)变成了(hotfix),说明成功切换分支到hotfix上了。
合并分支(正常合并)
我们先切换到master分支上,然后再将hotfix分支合并到master分支上
合并分支(冲突合并)
为什么会产生冲突:合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改,Git无法替我们决定使用哪一个。必须人为决定新代码内容。
首先我们将同一行代码改成不同的内容,然后再进行合并,这时候就会报错,提示我们合并失败,且下一行提示我们master这个分支正在合并中,还没有合并完成。
然后我们使用vim hello.txt命令打开,会发现下方发生了变化的内容:
手动解决冲突:将要合并的代码留下,多余的删除,并且把新增的特殊符号都删除掉,然后保存退出就可以了。
然后再将修改后的文件添加到暂存区并提交。
GitHub操作
创建远程仓库
创建远程仓库别名
语法:git remote -v:查看当前所有远程地址别名
git remote add + 别名 + 远程地址:给远程地址起别名
推送本地分支到远程仓库
语法:git push + 别名 + 分支
拉取远程仓库到本地库
语法:git pull + 别名 + 分支
注意:拉取到本地库之后会自动提交本地库。
克隆远程仓库到本地
语法:git clone 远程地址
首先,先从远程代码仓库的所有者获取clone地址:
然后进行克隆操作:
总结:clone会做如下三步操作:
1.拉取代码
2.初始化本地库
3.创建别名
所以我们在进行clone操作时,不需要使用git init初始化本地库。
另外,在推送别人的远程仓库时,会报错,提示我们没有权限,此时需要加入到仓库创建者的团队当中。
邀请成功之后就可以进行代码推送了。
SSH免密登录
接下来来到我们下面的路径
然后点击git bash here
输入如下指令,并且连续敲击三次回车:
然后我们进入生成的.ssh文件夹中
然后我们使用cat id_rsa.pub查看公钥并复制,进入到github中
IDEA集成Git
配置Git忽略文件
为什么要忽略它们
Eclipse、IDEA等IDE中的部分代码文件与项目的实际功能无关,不参与服务器上不熟运行,把它们忽略掉能够屏蔽IDE工具之间的差异。
Eclipse:
IDEA:
怎么忽略
1.在用户根目录下创建忽略规则文件 xxxx.ignore(前缀名随便起,建议是git.ignore),
引用规则如下:
2.在.gitconfig文件中引用忽略配置文件,core后面的是引用位置
IDEAGit操作
在IDEA中定位Git
使用IDEA创建git本地库
执行完这一步之后,发现左边的文件变红了,表明未被追踪,此时也说明了创建本地库成功了。
追踪文件
提交
修改完代码之后可以显示修改差异
查看版本信息
切换版本
右键要切换的版本,然后选择签出修订’版本号’
新建分支
右键项目
然后为新分支起一个名字,可以看到右下角分支发生了变化
切换分支
点击右下角,然后选中要切换的分支,点击签出,即可切换分支
合并分支(正常合并)
点击右下角,然后选中要合并过来的分支,点击合并到master,即可将hotfix分支合并到master分支上,此时左下角同时也会提示我们合并成功。
合并分支(冲突合并)
如果IDEA检测出冲突合并时,会智能弹出窗口,在中间窗口进行手动合并。