初识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初始化本地库。

自动起了个origin的别名

另外,在推送别人的远程仓库时,会报错,提示我们没有权限,此时需要加入到仓库创建者的团队当中。

添加团队成员的操作

被邀请人进入邀请链接
邀请成功之后就可以进行代码推送了。

SSH免密登录

提示我们要添加一个公钥

接下来来到我们下面的路径

然后点击git bash here

输入如下指令,并且连续敲击三次回车:

然后我们进入生成的.ssh文件夹中

上面是私钥,下面是公钥

然后我们使用cat id_rsa.pub查看公钥并复制,进入到github中

添加成功

IDEA集成Git

配置Git忽略文件

为什么要忽略它们

Eclipse、IDEA等IDE中的部分代码文件与项目的实际功能无关,不参与服务器上不熟运行,把它们忽略掉能够屏蔽IDE工具之间的差异。

忽略文件

Eclipse:
Eclipse的忽略文件

IDEA:
IDEA的忽略文件

怎么忽略

1.在用户根目录下创建忽略规则文件 xxxx.ignore(前缀名随便起,建议是git.ignore),
引用规则如下:

2.在.gitconfig文件中引用忽略配置文件,core后面的是引用位置

IDEAGit操作

在IDEA中定位Git

使用IDEA创建git本地库

执行完这一步之后,发现左边的文件变红了,表明未被追踪,此时也说明了创建本地库成功了。

追踪文件

右键项目根目录

提交

提交并推送

修改完代码之后可以显示修改差异

查看版本信息

查看版本信息

切换版本

右键要切换的版本,然后选择签出修订’版本号’

切换版本

新建分支

右键项目

然后为新分支起一个名字,可以看到右下角分支发生了变化

切换分支

点击右下角,然后选中要切换的分支,点击签出,即可切换分支

切换分支

合并分支(正常合并)

点击右下角,然后选中要合并过来的分支,点击合并到master,即可将hotfix分支合并到master分支上,此时左下角同时也会提示我们合并成功。

合并分支

合并分支(冲突合并)

如果IDEA检测出冲突合并时,会智能弹出窗口,在中间窗口进行手动合并。