# Linux实战笔记-HIS项目实战Day01:版本控制与Git基础

本项目模拟项目实战,根据项目引入对Git的学习以及部分IT常识

一、HIS项目介绍

1.1 项目概述

HIS 英文全称 Hospital Information System ,中文全称 医院信息系统

系统主要功能按照数据流量、流向及处理过程分为:

  • 临床诊疗
  • 药品管理
  • 财务管理
  • 患者管理

1.2 业务说明

诊疗活动由各工作站配合完成,并将临床信息进行整理、处理、汇总、统计、分析等。

本系统包括以下工作站:

  • 门诊医生工作站
  • 药房医生工作站
  • 医技医生工作站
  • 收费员工作站
  • 对帐员工作站
  • 管理员工工作站

技术栈 :基于 SpringBoot 2.xVUE 实现

1.3 HIS业务流程与项目架构解析

HIS业务流程图
HIS项目架构图

1.4 组件解析

前端组件

  • VUE:用于用户界面构建的JavaScript框架

后端组件

  • SpringBoot:新一代JavaEE标准,开箱即用
服务支撑
服务组件 功能说明
RabbitMQ 消息队列服务,请求异步处理
MySQL 关系型数据库服务,数据持久化存储
Redis 缓存数据库服务,加速系统响应
Elasticsearch 搜索引擎服务,加速海量搜索
OSS 对象存储服务,海量静态资源存储
Nginx WEB服务,承接客户端请求,请求分离

1.5 HIS项目代码解析

项目源码地址https://gitee.com/robin_home/HIS.git

项目整理后代码结构

目录/文件 说明
HIS-BACKEND 后端源码,采用SpringBoot框架
HIS-CONFIG 配置文件模板
HIS-FONTEND 前端代码
HIS-FONTEND-DEPENDENCY 前端源码编译需要的依赖包
HIS-FONTEND-SOURCECODE 前端源码,采用VUE框架
HIS-SQL HIS项目数据库SQL文件

二、项目环境准备

2.1 环境准备要求

  • 最小化安装即可
  • 配置好主机名和IP地址
  • 关闭防火墙和SELinux
  • 搭建好yum

2.2 项目主机列表

主机名 IP地址 规格 角色应用
Programer 192.168.88.10/24 1vCPUs+1GiB+20G 程序员主机,Git
GitLab 192.168.88.20/24 2vCPUs+4GiB+20G 代码托管平台GitLab
Jenkins 192.168.88.30/24 2vCPUs+2GiB+20G 持续集成工具Jenkins
Services 192.168.88.50/24 2vCPUs+4GiB+20G 应用服务器(RabbitMQ、MySQL、Elasticsearch、Redis)
Backend 192.168.88.60/24 2vCPUs+2GiB+20G 后端服务器(JDK环境、JAR包)
Fontend 192.168.88.70/24 1vCPUs+1GiB+20G 前端服务器(Nginx)
项目准备
  • 准备项目实战使用机器共6台
  • 注意按照表格参数配置机器规格
  • 配置好主机名和IP地址
  • 配置好每台主机yum源
  • 关闭防火墙和SELinux

三、开发体系概述

3.1 前端开发

前端是互联网行业术语,主要是创建web或者app的前端页面,结果是呈现给用户的内容。

开发者通过前端语言,开发出各种前端框架和技术,从而实现各种产品用户页面的交互。

3.2 后端开发

后端开发就是让应用程序在服务器端呈现。

相比于前端,后端开发人员通常要掌握更多的技能,能够处理业务逻辑和访问其他资源,如数据库、文件服务。

后端是应用程序的支柱。

3.3 全栈开发

作为全栈开发人员,不能单一的做前端或后端,全栈人员可以同时兼顾前端后端开发。全栈开发更具备挑战性,涉及知识面更加完整。

3.4 框架概述

框架概念:框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法。另一种定义认为,框架是可被应用开发者定制的应用骨架。

为什么使用框架

  • 随着业务的扩大,需求的提升,开发框架可以不断升级
  • 具有功能强大、提高企业竞争力、降低开发成本、改善客户满意度、控制开发进度等优势特点
  • 是企业专心研发自身业务,无需顾虑框架功能操作,从而提升团队开发效率的得力助手

常用框架

前端框架 Java框架 Python框架 PHP框架
jQuery Spring Django ThinkPHP
Vue SpringMVC Flask KYPHP
React SpringBoot Tornado SpeedPHP
Angular SpringCloud KPHP ---
--- Mybatis --- ---
--- Swagger-UI --- ---

四、版本控制

4.1 基本概念

版本控制 是管理修改 的艺术,指对软件开发过程中各种程序代码、配置文件及说明文档等文件的变更管理,是软件管理配置的核心思想之一。

版本控制的好处

  1. 优雅的备份:本地和服务器均保存备份文件,当本地出现问题时可以通过服务器修复
  2. 多人并行开发:每个人通过创建属于自己的分支,不影响其他人操作
  3. 了解变化内容:提交版本信息时需要加上简单的备注信息,标记本次修改的内容

4.2 版本控制系统

版本控制系统 是一个记录文件内容变化以便将来查阅特定版本修订情况 的系统。不仅可以应用于软件源代码文件,而且可以对任意类型文件进行版本控制。

版本库 是版本控制系统的核心,是版本控制的核心。任意数量客户端通过写数据库分享代码,是典型的客户/服务器系统。

4.3 版本控制软件分类

类型 软件
集中式版本控制软件 CVS、SVN (Subversion)
分布式版本控制软件 Git、BitKeeper (收费)

集中式分布式的核心区别:

  • 集中式(如SVN):所有版本数据存储在中央服务器,客户端从中央服务器获取或提交代码,依赖网络,存在单点故障风险。
  • 分布式(如Git):每个客户端本地都有一个完整的版本库副本,可以在本地进行版本管理操作,即使没有网络也能工作,更加灵活可靠。

五、Git分布式版本控制

5.1 Git介绍

  • Linus Torvalds(Linux作者)编写
  • 是一个开源分布式版本控制软件
  • "the stupid content tracker",傻瓜内容跟踪器
  • 可以有效、高速的处理从很小到非常大的项目版本控制

5.2 Git基础概念

概念 说明
工作区 (Workspace) 存放从仓库中提取出来的文件的地方,放在磁盘上供你使用或修改
暂存区 (Index/Stage) 就是一个索引文件,保存了下次将提交的文件列表信息
仓库 (Local Repository) 保存所有数据的地方,这里边有提交的所有版本的数据
远程仓库 (Remote Repository) 托管代码的地方,可供其他人浏览、下载代码的服务器

5.3 Git工作流

基本工作流程

  1. 在工作区修改文件
  2. 使用 git add 将修改添加到暂存区
  3. 使用 git commit 将暂存区内容提交到本地仓库

5.4 Git常用子命令

子命令 功能说明
config 修改git配置
init 初始化本地仓库
add 添加修改到暂存区
commit 提交修改到本地仓库
status 查看当前状态
clone 将远程服务器的仓库克隆到本地
push 提交修改到远程服务器

六、Git安装

6.1 环境检查与Yum配置

  • Programer主机安装Git
bash 复制代码
# 查看当前系统语言及编码
[root@Programer ~]# echo $LANG
en_US.UTF-8

# 安装中文支持(选做)
[root@Programer ~]# dnf -y install langpacks-zh_CN.noarch

# 配置系统使用中文及编码
[root@Programer ~]# vim /etc/locale.conf
[root@Programer ~]# cat /etc/locale.conf
LANG="zh_CN.UTF-8"

# 重启使语言配置生效
[root@Programer ~]# reboot

# 确认使用中文编码
[root@Programer ~]# echo $LANG
zh_CN.UTF-8

# 验证yum源是否可用
[root@Programer ~]# yum clean all
[root@Programer ~]# yum repolist -v
...
Total packages: 8,265

6.2 安装Git

bash 复制代码
# yum源中集成了Git软件包,使用yum安装Git
[root@Programer ~]# yum -y install git
...
Complete!

# 查看Git版本
[root@Programer ~]# git --version
git version 2.31.1

# 查看Git命令帮助信息
[root@Programer ~]# git --help

七、案例3:Git版本库操作

7.1 Git基础配置

Git在使用前需要做一些基础配置,配置分为三个级别:

  • --local:仓库级(仓库目录下.git/config)
  • --global:全局级(~/.gitconfig)
  • --system:系统级(/etc/gitconfig)
bash 复制代码
# 设置用户名。此用户名不校验,但是一般企业内都有统一的规范
[root@Programer ~]# git config --global user.name mark

# 设置用户邮箱
[root@Programer ~]# git config --global user.email mark@test.com

# 设置版本库默认分支,以后执行 git init 新建仓库时,默认创建的第一个分支名字叫 master
[root@Programer ~]# git config --global init.defaultBranch master

# 查看已有Git配置
[root@Programer ~]# git config --list
user.name=mark
user.email=mark@test.com
init.defaultbranch=master

# 查看Git配置持久化文件
[root@Programer ~]# cat ~/.gitconfig
[user]
    name = mark
    email = mark@test.com
[init]
    defaultBranch = master

7.2 Git初始化空版本库

bash 复制代码
# 使用Git命令初始化空版本库
[root@Programer ~]# ls
[root@Programer ~]# git init myproject   #初始化空版本库
已初始化空的 Git 仓库于 /root/myproject/.git/

# 确认版本库已创建
[root@Programer ~]# ls
myproject

# 查看版本库目录结构
[root@Programer ~]# ls -a myproject/
.  ..  .git

[root@Programer ~]# ls -a myproject/.git/
.  ..  branches  config  description  HEAD  hooks  info  objects  refs

7.3 将已有目录制作成版本库

bash 复制代码
# 创建空目录
[root@Programer ~]# mkdir mytest
[root@Programer ~]# ls -a mytest/
.  ..

# 进入目录
[root@Programer ~]# cd mytest/

# 将已有目录制作成Git版本库
[root@Programer mytest]# git init
已初始化空的 Git 仓库于 /root/mytest/.git/

# 确认.git目录已生成
[root@Programer mytest]# ls -a
.  ..  .git

[root@Programer mytest]# ls -a .git/
.  ..  branches  config  description  HEAD  hooks  info  objects  refs

[root@Programer mytest]# cd

7.4 Git版本库操作

7.4.1 基本操作流程
bash 复制代码
# 进入项目目录
[root@Programer ~]# cd myproject/

# 查看Git本地仓库状态
[root@Programer myproject]# git status
位于分支 master

尚无提交

无文件要提交(创建/拷贝文件并使用 "git add" 建立跟踪)

# 创建readme文件
[root@Programer myproject]# echo "Learning Git" >> readme.md

# 再次查看状态
[root@Programer myproject]# git status
位于分支 master

尚无提交

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)
        readme.md

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

# 将文件信息添加到暂存区
[root@Programer myproject]# git add readme.md

# 查看暂存区状态
[root@Programer myproject]# git status
位于分支 master

尚无提交

要提交的变更:
  (使用 "git rm --cached <文件>..." 以取消暂存)
        新文件: readme.md

# 将暂存区文件提交到本地仓库
[root@Programer myproject]# git commit -m "add readme"
[master(根提交) 09d8603] add readme
 1 file changed, 1 insertion(+)
 create mode 100644 readme.md

# 确认工作区干净
[root@Programer myproject]# git status
位于分支 master
无文件要提交,干净的工作区
7.4.2 生成多个版本
bash 复制代码
# 创建test.txt文件
[root@Programer myproject]# echo 123 > test.txt

# 添加到暂存区
[root@Programer myproject]# git add test.txt

# 生成新版本
[root@Programer myproject]# git commit -m "add test.txt"
[master 27466f7] add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

# 修改test.txt文件
[root@Programer myproject]# echo 456 > test.txt

# 添加修改到暂存区
[root@Programer myproject]# git add .

# 生成新版本
[root@Programer myproject]# git commit -m "modify test.txt"
[master 58cdf79] modify test.txt
 1 file changed, 1 insertion(+), 1 deletion(-)

# 再次修改test.txt文件
[root@Programer myproject]# echo 789 > test.txt

# 添加修改到暂存区
[root@Programer myproject]# git add ./

# 生成新版本
[root@Programer myproject]# git commit -m "done test.txt"
[master 0f44bf0] done test.txt
 1 file changed, 1 insertion(+), 1 deletion(-)

7.5 Git版本库查询

bash 复制代码
# 查看本地版本库提交记录(详细)
[root@Programer myproject]# git log
commit 09d8603547b7f7c6cf5b2850dd241d4b8b799b74 (HEAD -> master)
Author: mark <mark@test.com>
Date:   Wed Feb 22 15:00:46 2026 +0800

    add readme

# 查看本地版本库提交记录(简略)
[root@Programer myproject]# git log --pretty=oneline
0f44bf04834eac643a0d56901039cec73128d3cc (HEAD -> master) done test.txt
58cdf7905a95a956fc65da264aab827fc7290dbf modify test.txt
27466f79df8e0cbfd3f8f2349143e054db8ac693 add test.txt
09d8603547b7f7c6cf5b2850dd241d4b8b799b74 add readme

# 查看本地版本库提交记录(极简)
[root@Programer myproject]# git log --oneline
0f44bf0 (HEAD -> master) done test.txt
58cdf79 modify test.txt
27466f7 add test.txt
09d8603 add readme
#这里的每一行都是一个版本

补充知识:commit哈希值的计算

Git的commit哈希值(如 0f44bf04834eac643a0d56901039cec73128d3cc)是通过SHA-1算法对以下信息计算生成的40位十六进制数:

  • 文件内容的快照
  • 父commit的哈希值
  • 作者信息(姓名、邮箱、时间)
  • 提交者信息
  • 提交信息(commit message)
  • 树对象的哈希值

这使得每次commit的哈希值都是唯一且不可篡改的,任何信息的微小变化都会导致哈希值完全不同,保证了版本历史的完整性和可验证性。

八、案例4:Git指针操作

8.1 HEAD指针概念

  • HEAD指针是一个可以在任何分支和版本移动的指针
  • 通过移动指针我们可以将数据还原至任何版本

8.2 查看Git指针信息

bash 复制代码
# 进入项目目录
[root@Programer ~]# cd myproject/

# 查看Git指针(HEAD指针指向当前版本)
[root@Programer myproject]# git log --pretty=oneline
0f44bf04834eac643a0d56901039cec73128d3cc (HEAD -> master) done test.txt   #HEAD -> master就是指针。
58cdf7905a95a956fc65da264aab827fc7290dbf modify test.txt
27466f79df8e0cbfd3f8f2349143e054db8ac693 add test.txt
09d8603547b7f7c6cf5b2850dd241d4b8b799b74 add readme

# 查看当前文件内容
[root@Programer myproject]# cat test.txt
789

root@Programer myproject# git log --pretty=oneline

0f44bf04834eac643a0d56901039cec73128d3cc (HEAD -> master) done test.txt

HEAD-> master就是指针。其中:

master(分支指针):它是一张"路标",明确指向当前这列火车的最后一节车厢(即最新的提交的项目33ef30c)。

HEAD(当前工作指针):它是一双"你的脚",明确指向你当前站在哪条路线上。现在它指向 master,说明你正在 master 这条路上干活。

8.3 利用指针实现Git版本还原

reset 意思是:"把当前分支的指针(比如 master)往后拽,退回到指定的历史版本去。"

--hard 意思是:"指针退回去之后,顺便把硬盘上的文件(工作区)和暂存区,也强行改成那个旧版本的样子,不要留任何新修改。"

bash 复制代码
# reset子命令用于版本还原
# 还原到指定版本(使用commit id前几位即可)
[root@Programer myproject]# git reset --hard 58cdf7905a
HEAD 现在位于 58cdf79 modify test.txt

# 确认HEAD指针已移动
[root@Programer myproject]# git log --oneline
58cdf79 (HEAD -> master) modify test.txt
27466f7 add test.txt
09d8603 add readme

# 查看文件内容已回退
[root@Programer myproject]# cat test.txt
456

# reflog子命令用于获取HEAD指针移动轨迹
[root@Programer myproject]# git reflog
58cdf79 (HEAD -> master) HEAD@{0}: reset: moving to 58cdf79
0f44bf0 HEAD@{1}: commit: done test.txt
58cdf79 (HEAD -> master) HEAD@{2}: commit: modify test.txt
27466f7 HEAD@{3}: commit: add test.txt
09d8603 HEAD@{4}: commit (initial): add readme

# 使用reflog配合reset回到最新版本
[root@Programer myproject]# git reset --hard 0f44bf0
HEAD 现在位于 0f44bf0 done test.txt

# 确认回到最新版本
[root@Programer myproject]# git log --oneline
0f44bf0 (HEAD -> master) done test.txt
58cdf79 modify test.txt
27466f7 add test.txt
09d8603 add readme

# 查看文件内容已恢复
[root@Programer myproject]# cat test.txt
789

补充:

  • git reset --hard :HEAD 会跟着 master 自动移动。--hard 参数非常暴力,它不仅移动指针,还会强制覆盖你当前工作目录(文件内容)和暂存区

    • (暴力强制覆盖):它不管三七二十一,直接强制覆盖工作区和暂存区。如果你有没保存的修改,它会直接丢弃,找不回来
  • git checkout:直接跳到历史版本,分离头指针(detached HEAD),master和HEAD分离

    • (安全拦截覆盖):它也会改工作区,但它在动手前会先检查。如果 checkout 过去会覆盖你当前没提交的修改,Git 会直接报错阻止,除非你强制加 -f(git checkout -f),否则它绝不乱删你的劳动成果

8.4 reset 三种模式对比

模式 工作区 暂存区 仓库 说明
--soft 不变 不变 移动HEAD 仅移动HEAD指针,保留所有修改
--mixed(默认) 不变 重置 移动HEAD 撤销暂存区,保留工作区修改
--hard 重置 重置 移动HEAD 完全还原,丢弃所有修改(谨慎使用)

九、案例5:Git分支操作

9.1 分支的基本概念

  • 分支可以让开发分多条主线同时进行,每条主线互不影响
  • 按功能模块分支、按版本分支
  • 分支也可以合并

常见的分支规范

分支名称 说明
MASTER分支 MASTER是主分支,是代码的核心
DEVELOP分支 DEVELOP最新开发成果的分支
RELEASE分支 为发布新产品设置的分支
HOTFIX分支 为了修复软件BUG缺陷的分支
FEATURE分支 为开发新功能设置的分支

9.2 分支管理

9.2.1 查看当前分支
bash 复制代码
# 查看本地Git仓库信息
[root@Programer myproject]# git status
位于分支 master
无文件要提交,干净的工作区

# 查看分支信息(-v显示最新提交)
[root@Programer myproject]# git branch -v
* master 0f44bf0 done test.txt
9.2.2 创建分支
bash 复制代码
# 创建hotfix分支
[root@Programer myproject]# git branch hotfix

# 创建feature分支
[root@Programer myproject]# git branch feature

# 查看分支信息
[root@Programer myproject]# git branch -v
  feature 0f44bf0 done test.txt
  hotfix  0f44bf0 done test.txt
* master  0f44bf0 done test.txt
9.2.3 切换分支
bash 复制代码
# 切换到hotfix分支
[root@Programer myproject]# git checkout hotfix
切换到分支 'hotfix'

# 查看分支信息(*标记当前分支)
[root@Programer myproject]# git branch -v
  feature 0f44bf0 done test.txt
* hotfix  0f44bf0 done test.txt
  master  0f44bf0 done test.txt

# 切换到feature分支
[root@Programer myproject]# git checkout feature
切换到分支 'feature'

[root@Programer myproject]# git branch -v
* feature 0f44bf0 done test.txt
  hotfix  0f44bf0 done test.txt
  master  0f44bf0 done test.txt
9.2.4 删除分支
bash 复制代码
# 创建develop分支
[root@Programer myproject]# git branch develop

# 查看所有分支
[root@Programer myproject]# git branch -v
  develop 0f44bf0 done test.txt
* feature 0f44bf0 done test.txt
  hotfix  0f44bf0 done test.txt
  master  0f44bf0 done test.txt

# 删除develop分支(-d安全删除,-D强制删除)
[root@Programer myproject]# git branch -d develop
已删除分支 develop(曾为 0f44bf0)。

9.3 Git分支合并

9.3.1 无冲突分支合并(git merge)
bash 复制代码
# 切换到hotfix分支
[root@Programer myproject]# git checkout hotfix
切换到分支 'hotfix'

# 创建haha.txt文件
[root@Programer myproject]# echo haha > haha.txt

# 添加并提交
[root@Programer myproject]# git add ./
[root@Programer myproject]# git commit -m "add haha.txt"
[hotfix 108cf46] add haha.txt
 1 file changed, 1 insertion(+)
 create mode 100644 haha.txt

# 确认文件存在
[root@Programer myproject]# ls
haha.txt  readme.md  test.txt

# 切换到master分支
[root@Programer myproject]# git checkout master
切换到分支 'master'

# 在master分支创建xixi.txt
[root@Programer myproject]# echo xixi > xixi.txt
[root@Programer myproject]# git add ./
[root@Programer myproject]# git commit -m "add xixi.txt"
[master 32f0842] add xixi.txt
 1 file changed, 1 insertion(+)
 create mode 100644 xixi.txt

# 确认master分支只有自己的文件
[root@Programer myproject]# ls
readme.md  test.txt  xixi.txt

# 查看分支状态
[root@Programer myproject]# git branch -v
  feature 0f44bf0 done test.txt
  hotfix  108cf46 add haha.txt
* master  32f0842 add xixi.txt

# 合并hotfix分支到master分支
[root@Programer myproject]# git merge hotfix
#此时会进入一个文件,要你解释合并的理由,直接wq即可
Merge made by the 'recursive' strategy.
 haha.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 haha.txt

# 确认hotfix分支的文件已合并到master
[root@Programer myproject]# ls
haha.txt  readme.md  test.txt  xixi.txt
[root@Programer myproject]# cat haha.txt
haha
[root@Programer myproject]# cat xixi.txt
xixi
9.3.2 有冲突的分支合并

当修改了不同分支中相同文件的相同行时,系统无法自动合并分支,产生冲突。

bash 复制代码
# 查看分支状态
[root@Programer myproject]# git branch -v
  feature 0f44bf0 done test.txt
  hotfix  108cf46 add haha.txt
* master  b4bea28 Merge branch 'hotfix'

# 切换到hotfix分支
[root@Programer myproject]# git checkout hotfix
切换到分支 'hotfix'

# 在hotfix分支创建a.txt(内容为hahaha)
[root@Programer myproject]# echo "hahaha" > a.txt
[root@Programer myproject]# git add .
[root@Programer myproject]# git commit -m "hotfix"
[hotfix af8a04b] hotfix
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt

# 切换到master分支
[root@Programer myproject]# git checkout master
切换到分支 'master'

# 在master分支创建a.txt(内容为xixixi)
[root@Programer myproject]# echo "xixixi" > a.txt
[root@Programer myproject]# git add .
[root@Programer myproject]# git commit -m "master"
[master f556200] master
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt

# 尝试合并hotfix分支到master分支
[root@Programer myproject]# git merge hotfix
冲突(add/add):合并冲突于 a.txt
自动合并 a.txt
自动合并失败,修正冲突然后提交修正的结果。

# 查看冲突文件内容
[root@Programer myproject]# cat a.txt
<<<<<<< HEAD
xixixi
=======
hahaha
>>>>>>> hotfix
9.3.3 解决分支冲突
bash 复制代码
# 手工编辑冲突文件,修改为最终需要的文件内容
[root@Programer myproject]# vim a.txt
[root@Programer myproject]# cat a.txt
xixixi
hahaha

# 添加解决冲突后的文件到暂存区
[root@Programer myproject]# git add ./

# 提交解决冲突后的版本
[root@Programer myproject]# git commit -m "resolv conflict"
[master 2a6f272] resolv conflict

9.4 分支与HEAD指针的关系

  • 创建分支的本质是在当前提交上创建一个可以移动的指针
  • 通过HEAD这个特殊指针判断当前分支

9.5 多分支提交的流程

  • 切换分支,只是移动HEAD指针
  • testing分支的提交,不会影响master
  • 切换回master分支后,master的提交也不影响testing分支

十、Git标签操作(了解)

10.1 标签概念

  • 标签用于标记某一提交点,唯一绑定一个固定的commit Id
  • 相当于为这次提交记录指定一个别名,方便提取文件
  • 可以为重要的版本打上标签
  • 标签可以是一个对象,也可以当作一个简单的指针,但不会移动

10.2 Git标签管理

标签类似一个快照,打上标签的这一刻,标签就"指向"了已经被创建的快照

bash 复制代码
# 查看已有标签
[root@Programer ~]# cd myproject/
[root@Programer myproject]# git tag

# 创建v1标签
[root@Programer myproject]# git tag v1

# 查看已有标签
[root@Programer myproject]# git tag
v1

# 创建v2标签
[root@Programer myproject]# git tag v2
[root@Programer myproject]# git tag
v1
v2

# 删除v2标签
[root@Programer myproject]# git tag -d v2
已删除标签 'v2'(曾为 2a6f272)

# 确认v2已删除
[root@Programer myproject]# git tag
v1

10.3 标签与分支的区别

特性 分支 (Branch) 标签 (Tag)
是否可移动 是,随着新提交而移动 否,固定指向某个commit
用途 开发新功能、修复bug 标记发布版本、里程碑
生命周期 持续演进 固化历史点

附录:常用Git命令速查表

命令 功能
git config --global user.name "name" 设置用户名
git config --global user.email "email" 设置用户邮箱
git config --list 查看所有配置
git init [dir] 初始化版本库
git status 查看仓库状态
git add <file> 添加文件到暂存区
git add . 添加所有修改到暂存区
git commit -m "msg" 提交到本地仓库
git log 查看提交日志
git log --oneline 查看简洁日志
git reflog 查看HEAD移动历史
git reset --hard <commit-id> 硬重置到指定版本
git branch 查看分支列表
git branch <name> 创建分支
git branch -d <name> 删除分支
git checkout <name> 切换分支
git merge <name> 合并分支
git tag 查看标签列表
git tag <name> 创建标签
git tag -d <name> 删除标签
相关推荐
三品吉他手会点灯1 小时前
嵌入式机器学习 - 学习笔记1.0.1 - 从 Alexa 到 TinyML:为什么机器学习开始跑进微控制器?
人工智能·笔记·嵌入式硬件·学习·机器学习
jsons12 小时前
rocky8内网离线批量补丁(你之前搭建的架构,多台服务器首选,无订阅)
linux·运维·服务器
博界IT精灵2 小时前
主存的扩展及其与CPU的连接(笔记没做完)
笔记·考研
阿拉斯攀登2 小时前
SPI 设备驱动开发
linux·驱动开发·嵌入式硬件·linux内核·嵌入式·linux驱动·spi
Yang_jie_032 小时前
笔记:数据结构(链队列的相关判断条件)
数据结构·笔记
zhou135284822673 小时前
Windows 配置 WSL (Ubuntu) 环境完整指南
linux·windows·ubuntu
FREEDOM_X3 小时前
Linux 进程间通讯(IPC)——总结
linux·c语言·前端·嵌入式硬件·struts
天空'之城3 小时前
Linux 系统编程 17:零拷贝技术全解
linux·嵌入式·零拷贝技术全解
网络小白不怕黑3 小时前
11.虚拟机模拟路由器实验
linux·运维·服务器·网络