一、Git是什么?有什么作用?
Git是一个分布式 版本控制 工具,主要用于管理开发过程中的源代码文件(Java文件、yml文件、xml文件等),在软件开发过程中被广泛使用
首先,咱们需要知道,目前咱们开发的代码都是存储到电脑的磁盘中的。
-
如果磁盘满了,或者是磁盘损坏了,是不是就意味着代码就丢失了呢?
-
一般项目都是协同开发,需要多人合作,那同事之间的代码该如何共享呢?
-
在项目开发的过程中,由于需求问题,想要把代码回退到前5天的代码,又该如何完成
其实呢,以上问题,都可以使用git来解决,它的核心作用如下:
-
远程备份: Git允许你将代码库备份到远程服务器,以防止数据丢失。常见的远程备份方式包括使用GitHub、GitLab、Gitee等代码托管服务。
-
多人协作: Git允许多个开发者在同一个代码库上协同工作。开发者可以共享代码、合并变更、解决冲突等
-
代码回溯: 代码回溯是指在Git中返回到先前的代码状态或版本。对于修复错误或者恢复不小心删除的代码非常有用。
-
版本切换: 在Git中,你可以通过切换分支或检出不同的提交来切换代码的版本。
所以本章的学习目标是:
-
能够掌握版本控制Git核心作用是什么
-
能够掌握Git基本概念,如本地仓库、远程仓库、分支
-
能够掌握Git常用命令,如本地仓库命令,远程仓库命令,分支、合并命令
-
在IDEA中集成并使用Git来完成项目代码的版本控制
二、Git环境准备
1、安装
下载地址:Redirecting...
安装完成后在任意目录点击鼠标右键,如果能看到如下菜单表示安装完成(Windows11操作系统点击右键后需要先点击显示更多选项):

-
Open Git GUI Here:打开Git图形界面(基本不用)
-
Open Git Bash Here:打开Git命令行(推荐使用)
打开后效果如下:

2、工作流程

-
本地仓库:开发人员自己电脑上的 Git 仓库
-
远程仓库:远程服务器上的 Git 仓库
3、全局配置
-
设置用户信息(全局配置,只配置这一次,必须配置):
TypeScriptgit config --global user.name "shangwenbo" git config --global user.email "swb18866359886@163.com"
注意:
上面设置的user.name和user.email是用户的身份标识,必须需要设置,不然后期的命令操作不了
理论上身份标识可以任意设置,建议还是设置成自己的名字,方便识别是谁提交了代码。
-
查看配置信息:
git config --list

三、Git本地仓库命令
在正式学习Git的常用命令前,咱们再来回顾一下Git的工作流程:

常见命令主要分为三大类:
-
本地仓库命令
-
远程仓库命令
-
分支命令
1、初始化本地仓库
要使用Git对项目代码进行版本控制,首先需要**初始化一个Git仓库。**可以通过如下命令操作:
-
初始化Git仓库:git init
-
具体操作步骤:
-
在任意目录下创建一个空目录
-
进入这个空目录,点击鼠标右键,选择Open Git Bash here,打开命令行窗口
-
执行命令 git init
-

如果在当前目录中看到.git文件夹(此文件夹为隐藏文件夹)则说明Git仓库创建成功
2、本地仓库相关概念
-
工作区:包含.git文件夹的目录 就是工作区,也称为工作目录或工作空间,主要用于存放开发的代码
-
版本库:.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等
-
暂存区:.git文件夹中有很多文件,其中有一个index文件就是暂存区 ,也可以叫做stage 。暂存区是一个临时保存修改文件的地方

3、常用命令

工作区文件的状态,会随着咱们执行Git的命令发生变化
(1)查看文件状态
git status
-
在工作区中随便创建一个文件,如下图:

-
然后执行命令,效果如下:

- untracked 未跟踪文件,说明当前文件还没有被git进行版本控制
(2)把新增或修改的文件添加暂存区
git add
-
git add abc.txt把指定文件 添加暂存区 -
git add *或者git add .把当前目录及其子目录下的所有文件都添加暂存区

- Changes to be committed 待提交 的更改内容,目前文件在暂存区,还未提交到本地仓库
(3)提交暂存区的文件到本地仓库
git commit
-
提交一个文件:
git commit -m "第一次提交abc.txt文件到本地仓库" abc.txt -
提交多个文件:
git commit -m "第一次提交abc.txt文件到本地仓库" *

-
-m选项指定了提交信息 (必须携带,需要知道这次提交的说明是什么 ,要尽可能的简洁) -
nothing to commit, working tree clean 没有需要提交的更改,工作目录是干净的(提交完成的效果)
-
查看详细的提交日志 git log

- 更加简洁的日志 git reflog

(4)将暂存区文件取消暂存或切换到指定版本
git reset
-
将暂存区文件取消暂存
-
在本地仓库中新创建一个
123.txt文件,然后执行命令git add 将它提交到暂存区,可以使用git reset取消暂存

-
切换到指定版本
-
咱们可以先把abc.txt文件添加点内容,并且可以多提交几次到本地仓库,比如下面对abc.txt文件进行了三次提交
-
第一次提交内容为空
-
第二次提交内容为:11111111
-
第三次提交内容为:22222222
咱们现在可以查看历史版本 ,执行git log

现在想要把abc.txt文件的内容恢复到第二次提交的版本内容:11111111,可以执行以下命令:
-
git reset --hard 88a6a5b34161e61f3fe51782b3c47699354ff5e3 -
--hard xxxx 是指提交日志中的唯一版本号

检查abc.txt文件的内容是否正常恢复为:11111111
4、常用命令-.gitignore文件
-
忽略文件:项目代码中不需要纳入版本控制系统的文件,通常是一些编译文件和临时的缓存文件,把它们纳入版本控制系统中毫无意义。
-
忽略文件列表被存放在项目根目录中一个被称之为 .gitignore 的文件中。

-
忽略文件的规则
-
忽略一个特定的文件 :
path/file.ext -
忽略项目下所有这个名字的 文件:
filename.ext -
忽略项目下所有这个类型的 文件:
*.class -
忽略一个特定目录下的 所有文件:
target/*
-

在本章的资料中已经提交了一个.gitignore文件,在项目开发中大家可以直接复制到项目中使用
四、Git远程仓库
前面执行的命令操作都是针对的本地仓库 ,本节咱们会学习关于远程仓库的一些操作
1、简介、创建远程仓库
-
借助互联网上提供的一些代码托管服务来实现,比如:GitHub、Gitee码云等。
-
自己在服务器端搭建,比如:GitLab、Gogs等。

码云(Gitee)的操作流程如下:
(1)注册码云账号(Gitee - 基于 Git 的代码托管和研发协作平台)

注册界面:

(2)登录码云

(3)创建远程仓库
登录系统之后,在右上角点击 "+" 号新建仓库

仓库名称自己定义(决定了仓库的地址),开源与否自己决定

创建成功之后,可以看到仓库的地址(https),后面咱们上传代码要用
https://gitee.com/kobebryantbo/git01.git

2、命令-推送相关

现在,咱们已经拥有了一个远程仓库了,那么如果要将上一节通过git init命令创建的本地仓库上传到远程仓库中,该怎么办呢?可以通过命令来为本地仓库添加远程仓库:
(1)添加关联的远程仓库
git remote add <shortname> <url>

(2)查看关联的远程仓库
git remote -v
如果要查看已经配置的远程仓库服务器,可以执行 git remote 命令 ,它会列出每一个远程服务器的简称。
如果已经关联了远程仓库,那么至少应该能看到 origin ,这是 Git 克隆的仓库服务器的默认名字。

解释说明:
-
本地仓库配置的远程仓库都需要一个简称,后续在和远程仓库交互时会使用到这个简称
-
可以通过-v选项查看远程仓库更加详细的信息
(3)移除关联的远程仓库
git remote remove <shortname>
可以删除关联的远程仓库,shortname指的是远程仓库的简称

接下来,将移除的远程仓库再添加回来,继续学习远程仓库的其他操作
(4)往远程仓库推送
git push <shortname> <branch>
咱们关联上仓库之后,可以把本地仓库的代码或文件提交到远程仓库中
命令格式:git push 远程仓库别名 分支名称
git push origin master
在使用git push命令将本地文件推送至码云远程仓库时,如果是第一次操作,需要进行身份认证,认证通过才可以推送,如下:

注意:上述的凭证输入的是gitee上的账号的和密码
提交成功之后的效果:

也可以在gitee中查看上传代码的情况:

3、命令-拉取相关
到这里,咱们成功地将自己的代码提交到了远程仓库中。将来,在企业项目开发中,一个项目组的所有成员都会将自己的代码提交到同一个远程仓库中,那么,假设有一位小伙伴新入职到了公司的项目组中,那么他又该如何将远程仓库中的代码拉取到他自己的电脑上呢,这就需要用到git clone命令啦
(1)从远程仓库克隆
git clone <url>
如果你想获得一份已经存在了的 Git 远程仓库的拷贝,这时就要用到 git clone 命令。
Git 克隆的是该 Git 仓库服务器上的几乎所有数据(包括文件、日志信息、历史记录等) ,而且克隆之后,该本地仓库就自动关联该远程仓库。
克隆仓库的命令格式: git clone 远程仓库地址(创建一个新的空目录执行该命令)

克隆成功之后,可以在目录中看到一个隐藏的文件夹 .git和刚刚咱们提交的所有文件

把仓库克隆到本地之后,本地仓库已经存在了,可以在克隆之后的仓库中继续执行其他git操作,如:git add、 git commit 等

现在,其他小伙伴提交了一份新文件到远程仓库中,那么,咱们怎样获取到这个最新的提交呢?
(2)从远程仓库拉取
git pull <shortname> <branch>
git pull 命令的作用是从远程仓库获取最新版本并合并到本地仓库
命令格式:git pull 远程仓库简称 分支名称

拉取完成后,就能在自己的本地仓库中看到其他小伙伴提交的代码啦:

(3)仓库中存在新文件
注意 :如果当前本地仓库不是从远程仓库克隆的 ,而是本地创建的仓库 ,并且仓库中存在新文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories)

解决此问题可以在git pull命令后加入参数--allow-unrelated-histories
五、分支
1、简介
-
分支是Git中的一个非常重要的概念。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线
-
同一个仓库可以有多个分支,各个分支相互独立,互不干扰。
-
通过
git init命令创建本地仓库时默认会创建一个master分支。

HEAD是一个特殊的引用(reference),它指向当前分支的最新提交(commit) 。HEAD标识了当前分支中工作的基础点 ,即你最近一次提交的地方
关键步骤流程如下:
-
创建分支:从主分支(如master)出发,创建一个新的分支 (如v1)。这允许开发者在新的分支上自由地进行代码修改,而不必担心这些修改会立即影响到主分支或其他团队成员的工作。
-
独立开发:在v1分支上,开发者可以自由地编写代码、测试功能 ,甚至进行多次提交 ,所有这些操作都独立于主分支。
-
合并分支:当v1分支上的开发完成后,开发者可以选择将v1分支的更改合并回主分支 。这确保了主分支能够包含所有最新的功能和修复 ,同时保持了代码的整洁和一致性。
-
灵活管理:Git的分支机制还允许开发者在需要时轻松地切换分支,比如从v1分支切换到master分支查看或处理其他事务,然后再切换回v1分支继续工作(HEAD的作用)
2、常见命令
常见的分支操作命令有:
查询分支
创建分支
切换分支
将分支推送到远程仓库
合并分支
(1)查询分支
git branch
-
git branch列出所有本地分支 -
git branch -r列出所有远程分支 -
git branch -a列出所有本地分支和远程分支

(2)创建分支
创建分支命令格式:git branch 分支名称

(3)切换分支
一个仓库中可以有多个分支,切换分支命令格式:git checkout 分支名称

注意:在命令行中会显示出当前所在分支,如上图所示。
(4)将分支推送至远程仓库
推送至远程仓库分支命令格式:git push 远程仓库简称 分支名称

推送完成后可以查看远程仓库:

(5)合并分支
合并分支就是将两个分支的文件进行合并处理,命令格式:git merge 分支命令
操作步骤:
-
在b1分支中 创建一个新的文件b1.txt文件
-
使用git add 添加到暂存区
-
使用git commit 命令提交到本地仓库
-
使用git checkout 命令切换到master分支
-
使用git merge 命令来合并两个分支

查看master分支的本地仓库中,也出现了b1分支中添加的b1.txt文件
注意:分支合并时需注意合并的方向,如上图所示,在master分支执行操作 ,结果就是将b1分支合并到master分支。
3、创建规则
在项目开发中,遵守Git分支的创建规则通常是为了提高团队协作效率、代码质量以及版本管理的清晰度。以下是一些常见的Git分支创建规则:
(1)主分支(master)
主分支是项目的稳定版本,用于发布和部署,只有经过严格测试和代码审核的代码才能被合并到主分支 ,通常命名为master,master分支以 tag 标记一个版本 ,因此在 master 分支上看到的每一个 tag 都应该对应一个线上版本。
(2)开发分支(develop/dev)
开发分支是团队进行日常开发的主要分支 ,包含了项目中最新的功能和代码 ,通常命名为develop或dev,每个新功能或任务通常从该分支创建独立的特性分支进行开发。
(3)特性分支(feature)
特性分支用于开发特定的功能 ,每个新功能或任务都应在从develop分支创建的feature/xxx形式的特性分支上进行开发和测试,开发完成后合并回 develop 分支 并且删除该 feature/xxx 分支。
(4)预发布分支(release)
预发布分支用于准备发布新版本 ,进行最后的测试和调整 ,从 develop 分支创建 以确保代码稳定,命名格式为release/xxx,其中xxx是具体的版本号 ,创建好 release 分支后需要对要发布的功能进行最后的测试 ,如果测试过程中若存在bug需要修复,则直接由开发者在release分支修复并提交 。测试完成之后,将 release 分支合并到 master 和 develop 分支,此时 master 为最新代码,用作上线。
(5)修复分支(hotfix/bugfix)
修复分支用于解决线上紧急bug或修复已知问题 ,从 master 分支创建以确保 修复代码直接应用于稳定版本 ,命名格式为hotfix/xxx或bugfix/xxx ,完成bug修复后将代码合并到master分支和develop分支 ,合并完成后可以删除该分支。
(6)总结
以上就是在项目中应该出现的分支以及每个分支功能的说明,其中长期稳定存在的分支只有 master 和 develop 分支,别的分支在完成对应的使命之后都会合并到这两个分支然后被删除。简单总结如下:
master 分支: 线上稳定版本分支
develop 分支: 开发分支,衍生出 feature 分支和 release 分支
feature 分支: 功能分支,完成特定功能开发的分支,存在多个,功能合并之后删除
release 分支: 预发布分支,准备待发布版本的分支,存在多个,版本发布之后删除
hotfix 分支: 紧急热修复分支,存在多个,紧急版本发布之后删除

六、版本冲突与解决
1、冲突产生的情况
-
多人同时修改同一文件:一个项目是由一个团队开发,如果多个开发人员同时对同一个文件的相同部分进行修改,并尝试提交这些修改时,Git无法自动合并这些更改,从而导致冲突。
-
合并分支时: 当尝试将两个不同的分支合并到一个公共分支(如主分支)或者尝试将其他分支的代码合并到当前分支时,如果这些分支对同一个文件进行了不同的修改,Git在合并这些更改时可能会产生冲突。
-
重命名或移动文件:如果在一个分支中重命名或移动了文件,而在另一个分支中对原始文件进行了修改,那么在合并这些分支时可能会产生冲突。
-
删除文件:如果一个分支删除了某个文件,而另一个分支对该文件进行了修改,合并时也会发生冲突。
2、解决冲突
解决Git冲突通常需要手动干预,为了更好的演示冲突的问题,咱们可以手动制造一个冲突
-
在master分支中,对abc.txt文件进行修改,在第2行添加内容,然后add commit
-
切换到b1分支中,对abc.txt文件进行修改,在第2行添加内容(与master不同),然后add commit
-
执行合并分支的命令:git merge master (从master分支合并到b1分支),冲突就会产生

以下是一些常用的解决冲突步骤:
(1)查看冲突
-
使用
git status命令查看哪些文件存在冲突。 -
使用
git diff命令查看冲突文件的差异。
(2)手动解决冲突
-
打开冲突文件,找到被Git标记的冲突部分 。通常,Git会用
<<<<<<<、=======和>>>>>>>这样的标记来指示冲突的开始、 当前分支的更改、 另一个分支的更改 和冲突的结束。

3. 手动编辑冲突部分,根据需要保留或合并不同的更改。
-
删除Git的冲突标记(
<<<<<<<、=======、>>>>>>>)。
(3)标记冲突已解决
- 使用
git add命令将解决冲突后的文件添加到暂存区 ,标记为冲突已解决。
(4)提交更改
-
使用
git commit命令提交解决冲突后的更改 。在提交信息中,可以简要描述解决冲突的过程。 -
git commit -a -m '解决冲突'全部提交 -
git commit abc.txt -i -m "解决冲突"提交部分文件
(5)(可选)继续合并或推送
-
如果是在合并分支时产生的冲突,解决冲突后可以继续合并其他分支。
-
如果需要,将更改推送到远程仓库。
解决冲突时,需仔细分析原因和上下文,确保选择正确方案。为减少冲突,建议保持良好沟通和协作,避免同时修改同一文件的同一个位置,频繁提交代码和定期合并分支也有助于及时发现和解决冲突。
七、日常开发常见命令小结
在日常的开发中,常见的git命令操作和流程如下:

命令使用流程
-
进入项目团队先找直属领导开通远程仓库Git账号
-
使用git clone命令克隆远程仓库的代码到本地的工作空间(首次使用,仅需一次)
-
编写完代码后,使用git add命令添加暂存区
-
使用git commit命令提交到本地仓库
-
使用git pull 命令拉取最新的代码,如有冲突需沟通解决
-
使用git push推送到远程仓库
-
不断重复3-6步
八、IDEA中使用Git
1、获取Git仓库的两种方式
(1)IDE集成Git
通过Git命令可以完成Git相关操作,为了简化操作过程,咱们可以在IEDA中配置Git ,配置好后就可以在IDEA中通过图形化的方式来操作Git。
(2)在IDEA中配置Git
在IDEA中使用Git,本质上还是使用的本地安装的Git软件,所以需要提前安装好Git并在IDEA中配置Git。
Git安装目录:

git.exe:Git安装目录下的可执行文件,前面执行的git命令,其实就是执行的这个文件
IDEA中的配置:

说明:如果Git安装在默认目录中(C:\Program Files\Git),则IDEA中无需再手动配置,直接就可以使用。
(3)获取Git仓库
在IDEA中获取Git仓库有两种方式:
-
本地初始化仓库,本质就是执行 git init 命令
-
从远程仓库克隆,本质就是执行 git clone 命令
(4)本地初始化仓库
在IDEA中通过如下操作可以在本地初始化一个本地仓库,其实底层就是执行的 git init 命令。操作过程如下:
可以使用第一章已完成的代码来进行版本控制
- 依次选择菜单【Version control】---【Create Git Repository】

- 在弹出的【Create Git Repository】对话框中选择当前项目根目录,点击【OK】按钮:

操作完成后可以看到当前项目根目录下出现了.git隐藏目录:

操作完成后可以在IDEA的工具栏中看到Git的相关操作图标:

(5)从远程仓库克隆
在IDEA中从远程仓库克隆本质就是执行的 git clone 命令,具体操作过程如下:
- 在IDEA的菜单栏中选择Git,再点击【Get from Version Control】或者【Clone】

- 在弹出的【Clone Repository】窗口中输入远程仓库的URL地址和对应的本地仓库存放目录,点击【Clone】按钮进行仓库克隆操作

2、.gitignore忽略文件
如果从Git中clone回来的项目的根目录中已经存在了忽略文件.gitignore文件,咱们直接使用就可以了
如果不存在.gitignore文件,可以将资料中提供的.gitignore文件拷贝到项目根目录中使用

3、本地仓库相关操作
(1)本地仓库操作
-
将文件加入暂存区,本质就是执行 git add 命令
-
将暂存区的文件提交到版本库,本质就是执行 git commit 命令
-
查看日志,本质就是执行 git log 命令
(2)将文件加入到暂存区
在项目上点击右键,找到git,当在Git工作区新增文件或者对已有文件修改后,就需要将文件的修改加入暂存区
具体操作如下:


(3)将暂存区文件提交到版本库
将暂存区文件提交到版本库,可以选择一个文件进行提交,也可以选择整个项目提交多个文件。在IEDA中对文件的提交进行了简化操作,也就是如果文件修改后,无需再加入暂存区,可以直接提交。
(4)提交一个文件

可以看到,如果选中一个文件提交,则菜单名称为【Commit File...】

(5)提交多个文件
可以看到,如果提交多个文件,则菜单名称为【Commit Directory...】

由于提交操作属于高频操作,所以为了进一步方便操作,在IDEA的工具栏中提供了提交操作的快捷按钮

(6)查看日志
查看日志,既可以查看整个仓库的提交日志,也可以查看某个文件的提交日志。
(7)查看整个项目的提交日志

下面展示了提交的日志列表信息

在上图中,双击右侧的application.yml文件,可以查看这次提交和提交之前的代码对比

(8)查看单个文件的日志

4、远程仓库相关操作
(1)远程仓库操作
-
查看远程仓库,本质就是执行 git remote 命令
-
添加远程仓库,本质就是执行 git remote add 命令
-
推送至远程仓库,本质就是执行 git push 命令
-
从远程仓库拉取,本质就是执行 git pull 命令
(2)查看远程仓库和添加远程仓库
右键项目,找到【Git】-->【Manage Remotes...】

在弹出的框中可以查看已经关联的远程仓库,如果没有,则可以点击"+"号来新增远程仓库

注意,大家需要提前在gitee中创建一个新的远程仓库
(2)推送至远程仓库
可以通过如下操作将本地仓库文件推送至远程仓库:

在弹出的【Push Commits】窗口中可以看到本次推送的文件,点击【Push】按钮即可推送至远程仓库:

如果是第一次Push代码到远程仓库,需要填写Git的用户名、密码并登录

推送成功之后,可以在gitee中查看推送之后的代码

(3)从远程仓库拉取代码
可以通过如下操作从远程仓库拉取:

5、分支相关操作
(1)分支操作
-
查看分支,本质就是执行
git branch命令 -
创建分支,本质就是执行
git branch 分支名命令 -
切换分支,本质就是执行
git checkout命令 -
将分支推送到远程仓库,本质就是执行
git push命令 -
合并分支,本质就是执行
git merge命令
(2)查看分支
可以通过如下操作查看分支:

(3)创建分支
分支窗口中点击【New Branch】,弹出输入分支名称,点击Create按钮,完成分支的创建

创建成功之后的效果是这样的

(4)切换分支 | 推送分支 | 合并分支
通过如下操作可以切换分支:

推送分支:

合并分支:

6、遇到冲突怎样解决
在IDEA中产生冲突后,可以通过图形界面查看和解决,下图是产生冲突之后的效果展示:

accept yours:这意味着在解决冲突时,你选择了保留你自己的更改,而忽略了他人的更改。换句话说,你决定使用你自己的代码版本,而不是合并其他人的更改。
accept theirs:这与"accept yours"相反,意味着你选择了接受他人的更改,而忽略了你自己的更改。在这个选项下,你决定采用他人的代码版本,而不是你自己的。
merge:这通常意味着你尝试手动解决冲突,将你和他人的更改结合起来。需要打开代码文件查看代码的不同部分,决定哪些更改应该保留,哪些应该丢弃,或者可能需要编写新的代码来融合两个版本。(推荐使用)
点击Merge按钮

如上图,有三个框,可以根据实际情况从历史版本和当前版本的代码选择最终合并的结果,冲突即解决
九、微实战内容介绍
十、微实战讲解
-
在gitee中创建一个新的仓库专门来存储前端代码
-
使用git命令将空仓库拉取到本地磁盘目录
git clone https://gitee.com/kobebryantbo/vue-tlias-management.git
-
将Web阶段的Tlias智能学习辅助系统的前端代码拷贝到工作区
cd vue-tlias-management
git add *
-
使用git命令的方式把本地的前端代码上传到gitee新建的仓库中
git commit -m '提交前端项目'
git push origin master