Git
初识Git
Git简介
git是一个免费的、开源的分布式版本控制系统,可以快速高效的处理从小型到大型的各种项目。
版本控制工具
集中版本控制工具:CVS、SVN、VSS
优点:每个人都可以在一定程度上看到项目中的其他人在做些什么。管理员也可以轻松掌握每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来的轻松容易。
缺点:中央服务器的单点故障,如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
分布式版本控制工具:Git、Mercurial、Darcs
解决了集中式版本控制系统的缺陷
优点:服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
每个客户端保存的也都是完整的项目(包含历史记录,更加安全)
代码托管中心
基于网络服务器的远程代码仓库,简称为远程库。
局域网
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 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检测出冲突合并时,会智能弹出窗口,在中间窗口进行手动合并。

可能会遇到的一些问题
git SSL certificate problem: unable to get local issuer certificate
这个问题是由于没有配置信任的服务器HTTPS验证。默认,cURL被设为不信任任何CAs,就是说,它不信任任何服务器验证。
只需要执行如下命令即可以解决:git config –global http.sslVerify false

