Git 分布式版本控制工具
今日目标
Git概述 Git代码托管服务 Git常用命令
之前小伙伴们,已经跟着我学习一段时间的SpringBoot技术了,但是我们代码还在本地,那么如果我们不在电脑旁,自己代码怎么查看,再比如说多个小伙伴一起开发一个项目怎么办?这就用到了今天学习的内容GIT。
1. 前言
1.1 什么是Git
Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发过程中被广泛使用。
其他的版本控制工具软件:
SVN CVS VSS
1.2 使用Git能做什么
代码回溯:Git在管理文件过程中会记录日志,方便回退到历史版本 版本切换:Git存在分支的概念,一个项目可以有多个分支(版本),可以任意切换 多人协作:Git支持多人协作,即一个团队共同开发一个项目,每个团队成员负责一部分代码,通过Git就可以管理和协调 远程备份:Git通过仓库管理文件,在Git中存在远程仓库,如果本地文件丢失还可以从远程仓库获取
2. Git概述
2.1 Git简介
Git 是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git 仓库来存储和管理这些文件,Git 仓库分为两种:
本地仓库:开发人员自己电脑上的 Git 仓库 远程仓库:远程服务器上的 Git 仓库

解释说明:
commit:提交,将本地文件和版本信息保存到本地仓库
push:推送,将本地仓库文件和版本信息上传到远程仓库
pull:拉取,将远程仓库文件和版本信息下载到本地仓库
2.2 Git下载与安装
下载地址:https://git-scm.com/download

下载完成后得到安装文件:

直接双击完成安装即可(一直下一步),安装完成后可以在任意目录下点击鼠标右键,如果能够看到如下菜单则说明安装成功:

Git GUI Here:打开Git 图形界面

Git Bash Here:打开Git 命令行

注意:上面的账号信息默认是计算机名,所以每个电脑的信息不同,后面会进行设置。
Git安装目录结构如下:

3. Git代码托管服务
3.1 常用的Git代码托管服务
Git中存在两种类型的仓库,即本地仓库和远程仓库。那么我们如何搭建Git远程仓库呢?
我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、码云、GitLab等。
| 名称 | 网址 | 说明 |
|---|---|---|
| gitHub | https://github.com/ | 一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托管,故名gitHub |
| 码云 | https://gitee.com/ | 国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快 |
| GitLab | https://about.gitlab.com/ | 一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务 |
| BitBucket | https://bitbucket.org/ | 一家源代码托管网站,采用Mercurial和Git作为分布式版本控制系统,同时提供商业计划和免费账户 |
这里我使用的是gitHub,具体如何创建大家可自行查阅各自官方文档,这里就不过多介绍,因为我们主要是学习如何使用git.
4. Git常用命令
4.1 Git全局设置
当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用该用户信息。在Git 命令行中执行下面命令:
设置用户信息
git config --global user.name 'springboot葵花宝典'
git config --global user.email 'zbbmeta@qq.com'
查看配置信息
git config --list

注意:上面设置的user.name和user.email并不是我们在注册gitHub时使用的用户名和邮箱,此处可以任意设置。
4.2 获取Git仓库
要使用Git对我们的代码进行管理,首先需要获得Git仓库。
获取Git仓库通常有两种方式:
在本地初始化Git仓库(不推荐) 从远程仓库克隆(推荐)
4.2.1 在本地初始化Git仓库
介绍
在开发人员本地电脑磁盘任意选择一个目录,通过git创建本地的git版本仓库
命令格式
git init
实现步骤
在任意目录下创建一个空目录(例如git_learn)作为我们的本地Git仓库

进入git_learn这个目录里面,点击右键打开Git bash窗口

执行命令
git init
如果在当前目录中看到.git文件夹(此文件夹为隐藏文件夹)则说明Git仓库创建成功

效果

4.2.2 从远程仓库克隆
通过Git提供的命令从远程仓库进行克隆,将远程仓库克隆到本地
命令格式
git clone 远程仓库地址
实现步骤说明
创建仓库(如果仓库不存在)
复制远程仓库地址
在git_learn创建一个learn_springboot目录,,进入目录打开Git Bash here
执行克隆远程仓库的命令,将远程仓库克隆到本地
实现步骤实现
创建仓库(如果仓库不存在)(我已经创建过,具体如何创建不再演示)
复制远程仓库地址,操作如下图

例如复制到的地址:https://github.com/bangbangzhou/learn_springboot.git
回到上层目录,打开Git Bash here

执行克隆远程仓库的命令,将远程仓库克隆到本地
git clone https://github.com/bangbangzhou/learn_springboot.git
执行命令如图
效果

4.3 工作区、暂存区、版本库
为了更好的学习Git,我们需要了解Git相关的一些概念,这些概念在后面的学习中会经常提到。
版本库:前面看到的.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等
工作区:包含.git文件夹的目录就是工作区,也称为工作目录,主要用于存放开发的代码
暂存区:.git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方

4.4 Git工作区中文件的状态
Git工作区中的文件存在两种状态:
untracked 未跟踪(未被纳入版本控制)
tracked 已跟踪(被纳入版本控制) 1)Unmodified 未修改状态 2)Modified 已修改状态 3)Staged 已暂存状态
注意:文件的状态会随着我们执行Git的命令发生变化
4.5 本地仓库操作
本地仓库常用命令如下:
git status 查看文件状态 git add 将文件的修改加入暂存区 git reset 将暂存区的文件取消暂存或者是切换到指定版本 git commit 将暂存区的文件修改提交到版本库 git log 查看日志
准备测试文件

4.5.1 git status
执行命令用于查看文件状态
cd learn_springboot/
git status
效果

注意: 1.由于工作区中文件状态的不同,执行 git status 命令后的输出也会不同2.上面显示未跟踪文件“hello-git.txt”
4.5.2 git add
执行命令将文件的修改加入暂存区,命令格式:git add fileName
git add hello-git.txt
效果

加入暂存区后再执行 git status 命令,可以发现文件的状态已经发生变化。
git status
效果

4.5.3 git reset
将暂存区的文件取消暂存或者是切换到指定版本
取消暂存命令格式:git reset 文件名
切换到指定版本:git reset –-hard 版本号
git reset hello-git.txt
效果

注意:每次Git提交都会产生新的版本号,通过版本号就可以回到历史版本, 后面有演示,这里暂时演示取消暂存
4.5.4 git commit(重点)
是将暂存区的文件修改提交到版本库
命令格式: git commit -m msg 文件名
执行如下命令
# 重新添加到暂存区
git add hello-git.txt
# 查看文件状态
git status
# 将暂存区的文件提交到本地版本库
git commit -m '添加hello-git.txt文件' hello-git.txt
效果

解释说明:
-m:代表message,每次提交时需要设置,会记录到日志中 可以使用通配符*一次提交多个文件
4.5.5 git log
查看提交日志命令
git log
效果

通过git log命令查看日志,可以发现每次提交都会产生一个版本号,提交时设置的message、提交人、邮箱、提交时间等信息都会记录到日志中
4.5.6 案例:切换版本
需求
修改文件内容再次提交,之后进行切换版本,并且重置后指定版本后的版本被删除
实现步骤
修改文件,添加内容"第一步",保存文件 添加文件到暂存区 提交文件到版本库 查看版本日志 切换到指定版本
操作演示
修改文件,添加内容"first step ",保存文件

添加文件到暂存区
git add hello-git.txt
提交文件到版本库
git commit -m '添加 first step 到hello-git.txt' hello-git.txt
效果

查看版本日志
git log
效果

切换到指定版本, 版本号: ee9e0aed1116584b2547b0d26bac841d71fa74f7
git reset --hard 99c81858ed1dba8041e1e9c1f5f3b5d29b6b4495
效果

查看文件内容,已被切换到指定版本

4.6 远程仓库操作
前面执行的命令操作都是针对的本地仓库,本节我们会学习关于远程仓库的一些操作,具体包括:
git remote 查看远程仓库 git remote add 添加远程仓库 git clone 从远程仓库克隆 git pull 从远程仓库拉取 git push 推送到远程仓库
4.6.1 git remote
如果要查看已经配置的远程仓库服务器,可以执行 git remote 命令,它会列出每一个远程服务器的简称。
如果已经克隆了远程仓库,那么至少应该能看到 origin ,这是 Git 克隆的仓库服务器的默认名字。
git remote
效果

解释说明:
git remote -v
可以通过-v参数查看远程仓库更加详细的信息
本地仓库配置的远程仓库都需要一个简称,后续在和远程仓库交互时会使用到这个简称
4.6.2 git remote add
命令介绍
本地版本库关联添加远程仓库,前提是远程仓库在github上存在,则本地版本库可以关联添加这个远程仓库,用于以后进行不同操作。
命令格式
git remote add 简称 远程仓库地址
环境准备
github上添加远程仓库learn_springboot

复制远程仓库地址

地址:https://github.com/bangbangzhou/learn_springboot.git
本地版本库添加远程仓库演示
查看当前本地版本库关联的远程仓库信息
git remote -v
效果

由于当前本地版本库没有配置关联远程仓库,所以没有
添加关联远程成功执行命令
git remote add origin https://gitee.com/songyu0102/repo1.git
效果

注意:一个本地仓库可以关联多个远程仓库
查看远程仓库详细信息

注意:也可以通过命令删除关联的远程仓库,命令如下
git remote rm 远程仓库简称
如果想修改配置关联的远程仓库,需要先删除,之后再添加即可
4.6.3 git clone
如果你想获得一份已经存在了的 Git 远程仓库的拷贝,这时就要用到 git clone 命令。Git 克隆的是该 Git 仓库服务器上的几乎所有数据(包括日志信息、历史记录等)。
克隆仓库的命令格式:git clone 远程仓库地址
这里不需要任何操作,上面我们已经在4.2.2知识点从远程仓库克隆过了。

效果

4.6.4 git push
将本地仓库内容推送到远程仓库,命令格式:git push 远程仓库简称 分支名称
操作步骤
在learn_springboot目录下创建hello-git.txt文件,添加暂存区,提交到本地版本库 推送到远程仓库 查看远程仓库是否成功,如果有hello-git.txt文件说明成功
操作演示
在learn_springboot目录下创建hello-git.txt文件,添加暂存区,提交到本地版本库
创建hello-git.txt文件
执行添加暂存区,提交版本库命令
git add hello-git.txt
git commit -m '添加hello-git.txt' hello-git.txt
执行命令效果

推送到远程仓库
执行命令
git push origin main
效果

查看远程仓库是否成功,如果有hello-git.txt文件说明成功
执行刷新

第一次推送使用注意
在使用git push命令将本地文件推送至github远程仓库时,如果是第一次操作,需要进行身份认证,认证通过才可以推送。
4.6.5 git pull
git pull 命令的作用是从远程仓库获取最新版本并合并到本地仓库
命令格式:git pull 远程仓库简称 分支名称
案例:远程仓库添加内容,本地仓库拉取下来
操作步骤
在远程仓库learn_springboot位置点击"编辑",如图操作
在编辑位置输入“远程仓库添加内容”,填写提交注释,最后点击“提交”
本地版本库拉取远程仓库的最新内容与本地合并。
查看本地文件repo1.txt文件内容
操作演示
在远程仓库learn_springboot位置点击"编辑",如图操作

在编辑位置输入“远程仓库添加内容”,填写提交注释,最后点击“提交”

提交后的效果

本地版本库拉取远程仓库的最新内容与本地合并。
执行命令
git pull origin main
效果

查看本地文件hello-git.txt文件内容

注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories )
解决此问题可以在git pull命令后加入参数--allow-unrelated-histories
4.7 分支操作
分支是Git 使用过程中非常重要的概念。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
本地仓库和远程仓库中都有分支,同一个仓库可以有多个分支,各个分支相互独立,互不干扰。
通过git init 命令创建本地仓库时默认会创建一个main分支。

具体分支命令如下:
git branch 查看分支 git branch [name] 创建分支 git checkout [name] 切换分支 git push [shortName] [name] 推送至远程仓库分支 git merge [name] 合并分支
4.7.1 查看分支
查看分支命令:git branch
git branch 列出所有本地分支
git branch -r 列出所有远程分支
git branch -a 列出所有本地分支和远程分支

4.7.2 创建分支g
创建分支 命令格式:git branch 分支名称
演示:在learn_springboot本地版本库创建dev-release分支如图

4.7.3 切换分支
一个仓库中可以有多个分支,切换分支
命令格式:git checkout 分支名称
演示:在learn_springboot本地版本库切换操作分支为dev-release分支如图

注意:在命令行中会显示出当前所在分支,如上图所示。
4.7.4 推送至远程仓库分支
推送至远程仓库分支命令格式:git push 远程仓库简称 分支命令
案例:在dev-release分支出创建文件并推送至远程仓库的dev-release分支
操作步骤
在本地dev-release分支创建文件hello2-git.txt,添加到暂存区,提交到本地版本库 推送本地dev-release至远程仓库分支 推送完以后可以查看远程仓库的dev-releasegit分支
操作演示
在本地b1分支创建文件hello2.txt,添加到暂存区,提交到本地版本库


推送本地dev-release至远程仓库分支

推送完以后可以查看远程仓库的dev-release分支

4.7.5 合并分支
合并分支就是将两个分支的文件进行合并处理,命令格式:git merge 分支命令
案例:main分支合并dev-release分支
操作步骤
本地learn_springboot库切换分支为main。
main分支合并dev-release分支
查看合并后的目录资源结构,发现包含合并过来的hello2-git.txt文件
操作演示
本地learn_springboot库切换分支为main。


master分支合并dev-release分支 执行命令
git merge dev-release
效果

查看合并后的目录资源结构,发现包含合并过来的hello2.txt文件

注意:由于dev-release是在main上创建出来的,所以必须由main合并dev-release,不可以dev-release合并main




