视频学习:黑马程序员Java项目实战瑞吉外卖

部分内容参考:Git版本控制工具 | Kyle’s Blog

Git概述

  • Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),在软件开发过程中被广泛使用。
  • 作用
    • 代码回溯
    • 版本切换
    • 多人协作
    • 远程备份

简介

  • Git 是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git仓库来存储和管理这些文件,Git仓库分为两种:
    • 本地仓库:开发人员自己电脑上的Git仓库
    • 远程仓库:远程服务器上的Git仓库
  • commit:提交。将本地文件和版本信息保存到本地仓库
  • push:推送,将本地仓库文件和版本信息上传到远程仓库
  • pull:拉取,将远程仓库文件和版本信息瞎啊滋到本地仓库

下载和安装

安装完成后在任意目录点击鼠标右键,如果能看见如下菜单则表示安装完成:

image-20230703194009953


Git代码托管服务

常用的Git代码托管服务

  • Git中存在两种类型的仓库,即本地仓库远程仓库,那么我们如何搭建Git远程仓库呢?
  • 我们可以借助互联网上提供的一些代码托管服务俩实现,比较常用的有GitHub、Gitee、GitLab等
    • GitHub( 地址:https://github.com/ ),是一个面向开源私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub
    • Gitee(地址: https://gitee.com/ ),又名码云,是国内的一个代码托管平台(狗都不用),由于服务器在国内,所以相比较于GitHub,Gitee速度更快
    • GitLab(地址: https://about.gitlab.com/ ),是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务
    • BitBucket(地址:https://bitbucket.org/) ,是一家代码托管网站,采用Mercurial和Git作为分布式版本控制系统,同时提供商业计划和免费账户

Github就完事了

GitHub代码托管服务

在远程仓库的如下位置邀请其他用户成为仓库成员即可

image-20230703194548987


Git常用命令

Git全局设置

当安装 Git 后首先要做的事情是设置用户名称和 email 地址。这是非常重要的,因为每次 Git 提交都会使用该用户信息。

  • 设置用户命令信息(签名)

    1
    2
    git config --global user.name "wzy"
    git config --gloabl user.email "xxx@qq.com"
    • 签名的作用是为了区分不同操作者的身份
    • 用户的签名信息在每一个版本的提交信息中能够看到,以确认本次提交是谁做的
    • Git首次安装必须设置一下用户签名,否则无法提交代码
    • 这里设置用户签名和登录GitHub的账号没有任何关系,随便写
  • 查看配置信息命令

    1
    git config --list

通过上面的命令设置的信息都保存在~/.gitconfig文件中

获取Git仓库

要使用Git对我们的代码进行版本控制,首先需要获得Git仓库。

获取Git仓库命令

  • 本地初始化(不常用)

    • 在任意目录下创建一个空目录,作为我们的本地git仓库
    • 进入这个目录中,右键打开Git Bash窗口
    • 执行git init命令

    目录中能看到.git文件夹,则说明创建成功

  • 从远程仓库克隆(常用)

    • git clone [远程Git仓库地址]

注意:仓库是不能嵌套的,不能在一个仓库目录内,克隆/创建另一个仓库。

工作区、暂存区、版本库概念

  • 版本库:其实在git init之后,会在当前文件夹创建一个隐藏文件.git,这个文件就是版本库,版本库中存储了很多的配置信息、日志信息和文件版本信息等
  • 工作目录(工作区):包含.git文件夹的目录就是工作目录,主要用于存放开发的代码
  • 暂存区:一个临时保存修改文件的地方
    • .git文件夹内有很多文件,其中有一个名为index的文件就是暂存区,也可以叫做stage

三者关系:

image-20230703195853387

Git工作区中文件的状态

  • Git工作目录下的文件存在两种状态

    • untracked未跟踪(未被纳入版本控制)

    • tracked已跟踪(被纳入版本控制)

      1. Unmodified未修改状态

      2. Modified已修改状态

      3. Staged已暂存状态

这些文件的状态会随着我们执行Git的命令发生变化

本地仓库操作

本地仓库相关命令

命令 功能
git init 初始化本地库
git status 查看文件状态
git add [文件名称] 将文件的修改加入暂存区
git reset [文件名称] 将暂存区的文件取消暂存
git reset —hard [版本号] 切换到指定版本
git commit [文件名] 将暂存区文件提交到版本库中
git commit -m “日志信息” 将暂存区的文件提交到版本库中
git log 查看日志
git reflog 查看历史记录

本地仓库操作演示

  • git status 查看文件状态,git status -s使输出信息更加简洁

    image-20230703200628336

  • git add [文件名称] 将未跟踪的文件加入到暂存区,并查看文件状态

    image-20230703200826567

  • gie reset,将暂存区的文件取消暂存,并查看文件状态

    image-20230703200908168

  • git commit -m "日志信息" [文件名],将暂存区的文件提交到版本库中

    image-20230703201112411

    • 如果此时修改文件,查看状态处于modified

      image-20230703201243825

    • 修改完成后提交到缓存区,查看状态

      image-20230703201438196

      可以看出,相比于之前,虽然都是modified状态,但之前是红色,现在是绿色

  • git log查看日志

    多次提交会产生多个版本号

    image-20230703201650663

  • git reset --hard [版本号],切换到指定版本

    这里我们切换到之前版本。此时test.txt则为空

    注意:复制鼠标直接选中即可,粘贴鼠标中间即可

    image-20230703201925110

  • git rm [文件名],删除工作区文件,并查看状态,提交之后再次查看状态

    image-20230703202503122

远程仓库操作

远程仓库常用命令

命令 功能
git remote 查看远程仓库
git remote -v 查看当前所有远程地址别名
git remote add [short-name] [url] 添加远程仓库
git remote rm [short-name] 移除远程仓库
git clone [url] 从远程仓库克隆
git pull [short-name] [branch-name] 从远程仓库拉取
git push [short-name] [branch-name] 推送到远程仓库

远程操作操作演示

首先我们在github上创建一个远程仓库GitTest

  • git remote add [short-name] [url] 添加远程仓库。约定俗成short-name写成origin

    image-20230703203228179

  • git remote 查看远程仓库

    image-20230703203338428

    在没有关联之前,是没有远程仓库的;关联后显示远程仓库别名

  • git remote -v 查看当前所有远程地址更详细的信息

    image-20230703203523311

  • git clone [url] 这个很常用,就不展示了

  • git push [short-name] [branch-name] 推送到远程仓库

    这里我们将test.txt推送到远程仓库

    image-20230703204408994

    此时远程仓库如下:

    image-20230703204442782

  • git pull [short-name] [branch-name] 从远程仓库拉取

    首先在远端添加一个文件模拟多人合作

    image-20230703204842709

    可以看出新增的内容,同时本地也拉取了这个文件

  • 注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错fatal: refusing to merge unrelated histories
  • 解决此问题可以在git pull命令后加入参数--allow-unrelated-histories

分支操作

简述

分支是Git使用过程中非常重要的概念。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。同一个仓库可以有多个分支,各个分支相互独立,互不干扰。

通过git init命令创建本地仓库时默认会创建一个master分支。它并不是一个特殊的分支,它与其他分支没有区别

分支操作常用命令

命令 功能
git branch 查看分支:列出本地的所有分支
git branch -r 查看分支:列出所有的远程分支
git branch -a 查看分支:列出所有的本地分支和远程分支
git branch [branch-name] 创建分支
git checkout [branch-name] 切换分支
git push [short-Name] [branch-name] 推送至远程仓库分支
git merge [branch-name] 合并分支
git branch -d [branch-name] 删除分支
git branch -D [branch-name] 删除分支(即使该分支中进行了一些开发动作)
git push [short-Name] –d [branch-name] 删除远程仓库中的分支

分支操作演示

  • git branch 列出本地的所有分支

  • git branch -r 列出所有的远程分支

  • git branch -a 列出所有的本地和远程分支

    image-20230703210334715

  • git branch [branch-name] 创建分支

  • git checkout [branch-name] 切换分支

    可以看出星号和绿色表明当前所处分支

    image-20230703210550136

  • git push [short-Name] [branch-name] 推送至远程仓库分支

    image-20230703210842722

    此时github上出现新的分支

    image-20230703210923489

  • git merge [branch-name] 合并分支

    我们将maser分支上的内容合并到b1分支。merge后本地会出现master分支中的内容,但远程并没有,所以需要push一下

    image-20230703212035783

合并分支冲突

冲突产生的原因

  • 合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改
  • Git 无法替我们决定使用哪一个。必须通过手动操作来决定新代码内容。

演示

  1. 首先在b1分支上编辑master.txt文件: b1 branch

    image-20230703212850219

  2. 切换master分支上编辑master.txt文件: master branch

    image-20230703213136225

  3. b1分支合并到master分支。此时报错

    image-20230703213225634

解决方案

  • 手动编辑有冲突的文件,决定要使用的内容。

    • 报错文件

      1
      2
      3
      4
      5
      <<<<<<< HEAD
      master branch
      =======
      b1 branch
      >>>>>>> b1
    • 手动编辑

      1
      2
      master branch
      b1 branch
  • 将编辑好的文件添加到暂存区,(使用git add命令)

  • 最后执行提交(注意:此时的提交只输入git commit,不要加文件名,或者执行git commit [文件名] -i

分支作用展示

首先在master分支上新建一个文件master.txt。然后上传远端仓库

image-20230703211349596

  • 此时查看master分支:

    image-20230703211424467

  • 此时查看b1分支

    image-20230703211446381

可以看出,通过分支操作,实现了不同状态的内容,从而允许多个版本的代码共存

标签操作

简述

  • Git中的标签,指的是某个分支特定时间点的状态
  • 通过标签,我们可以很方便地切换到标记时的状态

image-20230703214315429

标签操作的常用命令

命令 功能
git tag 列出已有的标签
git tag [name] 创建标签
git push [shortName] [name] 将标签推送到远程仓库
git checkout -b [branch] [name] 检出标签(将这个标签状态的代码获取,需要创建新的分支)

标签操作展示

image-20230703214851023


在IDEA中使用Git

在IDEA中配置git

设置中选择获取git.exe

image-20230703215653396

获取Git仓库

  • 本地初始化仓库

    • 选择VCS选项卡 —> 创建Git仓库 —> 选择需要被Git管理的目录 —> 确定

      image-20230703220053447

  • 从远程仓库克隆

    • 选择VCS选项卡 —> 获取版本控制

      image-20230703220314915

    • 输入远程仓库地址克隆到本地指定位置

      image-20230703220433447

这里将之前github上的测试仓库克隆到这里

image-20230703220806584

并且出现了git的操作图标

image-20230703220855896

image-20230703221145039

本地仓库操作

将文件加入暂存区

此时在本地新增文件时,会提示是否将该文件添加到git,这里选择add,文件就会变绿,取消就会变红

image-20230703221516763

文件颜色的含义:

  • 正常颜色:已经纳入git管理

  • 红色:没有加到缓存区

  • 绿色:已经加到缓存区

    image-20230703221826716

如果不小心点了取消,可以通过如下操作加到缓存区:

image-20230703221939528

将暂存区的文件提交到版本库

直接点击右上角图标中的对号即可

image-20230703222253612

然后会弹出如下内容,填写相应日志,进行提交即可

image-20230703222436018

查看日志

点击右上角的历史记录即可查看

image-20230703222729257

远程仓库操作

查看远程仓库&添加远程仓库

  • 右键项目–>Git–>Manage Remotes

    image-20230703223250839

推送&拉取

  • 推送:右上角的向上箭头即可

    image-20230703222859164

    此时github上就会出现更新的内容

  • 推送:右上角向下箭头

分支操作

  • 查看分支:

    • 右键项目–>Git–>Branches

      image-20230703223712274

    • 屏幕右下角

      image-20230703223758144

  • 创建分支、切换分支等操作都是在上述页面进行

  • 将分支推送到远程

    还是上述界面,点击分支后选择push即可

    image-20230703224033301

  • 合并分支

    • 同理,选择其他分支点击后选择merge即可