【Git】初识Git
本篇文章的环境是在 Ubuntu/Linux 环境下编写的
文章目录
- 版本控制器
- Git 基本操作
- 安装 Git
- 创建 Git 本地仓库
- 配置 Git
- 认识工作区、暂存区、版本库
- 添加文件
- 修改文件
- 版本回退
- 撤销修改
- 删除文件
版本控制器
在日常工作和学习中,老板/老师要求我们修改文档,但修改可能不尽人意,多次修改后可能还不如最初的版本,但如果是直接在原文档上修改,那我们是否还能找回最初的版本呢?
若每一次大改,都是在复制出的副本上修改,可以解决上述原文档丢失的问题,但随着版本数量不断增多,我们还能记得每个版本各自修改了什么吗?
版本控制器就是为了解决上述问题而诞生的。所谓版本控制器,就是一个可以记录工程的每一次改动和版本迭代的管理系统,同时也方便多人协同作业
Git 基本操作
安装 Git
可以使用 git 或 git --version 查看是否已经安装了GIt
如果bash 响应的是 git: command not found类似的话语,那就是没有安装git
- 安装 Git:
#Centos
sudo yum -y install git
#Ubuntu
sudo apt-get install git -y
- 查看 Git 版本
git --version
创建 Git 本地仓库
Git 进行版本控制的方式是,使用仓库对代码进行管理
- 创建一个Git 本地仓库的命令为
git init,注意命令要在文件目录下执行,例如:

创建本地仓库后,会多出来一个.git隐藏文件,这个目录就是Git用来跟踪管理仓库的
其目录结构如下:
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ tree .git/
.git/
├── branches
├── config
├── description
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── fsmonitor-watchman.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── pre-merge-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ ├── pre-receive.sample
│ ├── push-to-checkout.sample
│ └── update.sample
├── info
│ └── exclude
├── objects
│ ├── info
│ └── pack
└── refs├── heads└── tags
配置 Git
当安装 Git 后很重要的一步是配置 用户名称 和 e-mail地址,命令如下:
git config -l #以列表形式显示配置
git config user.name "Your name" #配置用户名称
git config user.email "email" #配置email
使用 --unset 选项删除配置,例如:
git config --unset user.name
git config --unset user.email
可以使用--global 这个选项,该选项的效果是使得当前机器上所有的 Git 仓库都使用这个配置
git config --global user.name "Your name" #配置用户名称
git config --global user.email "email" #配置email
使用 --global 设置的配置不能直接使用--unset删除,而是也需要携带--global
git config --global --unset user.name
认识工作区、暂存区、版本库
-
工作区:和
.git同级的目录下的文件/目录 -
暂存区:
stage或index。一般存放在.git目录下的 index 文件(.git/index)中,暂存区有时也就索引(index) -
版本库:又名仓库,英文名
repository。.git就是Git的版本库。版本库里的所有文件都可以被Git管理起来,每个文件的修改、删除,Git 都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”

-
图中左侧为工作区,右侧为版本库。其中我们重点关注暂存区
-
在创建 Git 版本库时,Git 会为我们自动创建一个唯一的
master分支,以及指向 master 的一个指针HEAD -
当对工作区修改(或新增)的文件执行
git add命令,暂存区目录树的文件索引会被更新 -
当执行
git commit提交操作,master分支会做出相应的更新,可以简单理解为暂存区的目录树才真正被写到版本库中
小总结:必须通过git add和git commit命令才能将工作区的文件添加到仓库(版本库)中进行管理
添加文件
在包含.git的目录下新建一个ReadMe文件,使用git add命令将文件添加到暂存区
git add [file1] [file2] #可添加一个或多个文件到暂存区
git add [dir] #添加指定目录到暂存区
git add . #添加当前目录下的所有文件改动到暂存区
git add -f [file] #-f选项表示强制添加
再使用git commit命令将暂存区内容添加到本地仓库中
注意:提交时要对本次提交进行“描述”,记录提交的细节,方便后续查看,得知此次提交改动了些什么,这是很重要的一步,也绝对不能省略
git commit -m "描述" #提交暂存区全部内容到本地仓库中
git commit [file1] [file2] -m "描述" #提交暂存区的指定文件到本地仓库
成功提交后,Git会告诉我们一些改动的细节,示例:
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ touch ReadMe
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ vim ReadMe
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ cat ReadMe
hello git
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ git add .
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ git commit -m "new file:ReadMe"
[master (root-commit) 0008577] new file:ReadMe1 file changed, 1 insertion(+)create mode 100644 ReadMe
使用git log命令可以查看历史提交记录
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ git log
commit 000857774f55793cf3ba54f014aaa239dc226609 (HEAD -> master)
Author: bao-bao-hai-mian <1076847758@qq.com>
Date: Sun Sep 15 20:12:53 2024 +0800new file:ReadMe
git log显示从最近到最远的提交日志,并且可以看到commit 的描述信息
还可以加上--pretty=oneline选项,让消息简洁些
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ git log --pretty=oneline
000857774f55793cf3ba54f014aaa239dc226609 (HEAD -> master) new file:ReadMe
日志消息的一大串数字,是每次提交的commit id(版本号),是用 SHA1 计算出的一个很大的数字,用十六进制表示
再添加几个文件
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ touch file1 file2 file3
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ git add .
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ git commit -m "add three file:file1 file2 file3"
[master 7c61b82] add three file:file1 file2 file33 files changed, 0 insertions(+), 0 deletions(-)create mode 100644 file1create mode 100644 file2create mode 100644 file3
此时我们查看.git的目录结构
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ tree .git
.git
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── fsmonitor-watchman.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── pre-merge-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ ├── pre-receive.sample
│ ├── push-to-checkout.sample
│ └── update.sample
├── index
├── info
│ └── exclude
├── logs
│ ├── HEAD
│ └── refs
│ └── heads
│ └── master
├── objects
│ ├── 00
│ │ └── 0857774f55793cf3ba54f014aaa239dc226609
│ ├── 0e
│ │ └── 6b1780b73cd9220ec5073dc64b42f7ad4bd945
│ ├── 15
│ │ └── a37e9ef171cca4a5d985fccd1fcf9414b2c7cf
│ ├── 4b
│ │ └── 825dc642cb6eb9a060e54bf8d69288fbee4904
│ ├── 7c
│ │ └── 61b823e2c036bc9e37ec0d9676fab511b1db1e
│ ├── 8d
│ │ └── 0e41234f24b6da002d962a26c2495ea16a425f
│ ├── e6
│ │ └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│ ├── info
│ └── pack
└── refs├── heads│ └── master└── tags
相比于之前我们看到的 .git 结构,多了一些东西
index就是暂存区,git add后的内容都是添加到这里的HEAD是指向当前分支的指针,默认指向master
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ cat .git/HEAD
ref: refs/heads/master
而master分支,其实就是最近一次提交的commit id
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ cat .git/refs/heads/master
7c61b823e2c036bc9e37ec0d9676fab511b1db1e
objects为 Git 的对象库,里面包含了创建的各个版本库对象及内容。当执行git add命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,就位于.git/objects目录下
这些文件不能直接使用cat查看,都是经过sha(安全哈希算法)加密过的文件,不过可以使用git cat-file查看版本库对象内容
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ git cat-file -p 000857774f55793cf3ba54f014aaa239dc226609
tree 0e6b1780b73cd9220ec5073dc64b42f7ad4bd945
author bao-bao-hai-mian <1076847758@qq.com> 1726402373 +0800
committer bao-bao-hai-mian <1076847758@qq.com> 1726402373 +0800new file:ReadMe
显示正是一次提交的相关信息
其中还有一行tree commit id,我们使用同样的方式查看
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ git cat-file -p 0e6b1780b73cd9220ec5073dc64b42f7ad4bd945
100644 blob 8d0e41234f24b6da002d962a26c2495ea16a425f ReadMe
再看 ReadMe 对应的commit id
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ git cat-file -p 8d0e41234f24b6da002d962a26c2495ea16a425f
hello git
这正是我们提交的 ReadMe 中的内容
小总结:本地 git 仓库中,有几个文件和目录很特殊
- index:暂存区,
git add后会更新其内容- HEAD:指向当前分支的指针
- refs/heads/master:保存最近一次提交的
commit id- objects:包含了创建的各个版本库对象及内容,此处可以简单理解为存放了 git 维护的所有修改
修改文件
Git 跟踪并管理的并不是文件,而是修改
新增文件,删除文件,修改文件内容都是修改
示例:
往 ReadMe 文件中添加一些内容
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ cat ReadMe
hello git
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ vim ReadMe
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ cat ReadMe
hello git
i am coding
i am coding
i am coding
此时工作区的ReadMe 与 暂存区和版本库的 ReadMe 内容是不同的。git status命令用于查看当前仓库状态
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ git status
On branch master
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified: ReadMeUntracked files:(use "git add <file>..." to include in what will be committed).ReadMe.swpno changes added to commit (use "git add" and/or "git commit -a")
Git 检查到 工作区的 ReadMe 被修改了,但没有添加和提交,并建议我们更新修改
git diff [file] #显示暂存区和工作区文件的差异
git diff HEAD -- [file] #显示版本库和工作区文件的差异

版本回退
回退是版本控制器很重要的能力
使用git reset回退版本,具体如何回退根据参数而定
git reset [--soft | --mixed | --hard] [HEAD]
--soft:对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本--mixed:默认选项,使用时可以不带该参数。将暂存区和版本库回退,工作区不变--hard:工作区、暂存区、版本库都会回退HEAD:要回退到的版本- 指定
commit id HEAD表示当前版本HEAD^表示上个版本HEAD^^表示上上个版本,以此类推- 以可以使用
~数字表示 HEAD~0表示当前版本,HEAD~1表示上个版本,以此类推
- 指定
如果当前有三个版本,我们想回退到版本二,可以通过git log查看版本二的commit id,但当我们回退到版本二后,再使用git log将不会看到版本三的commit id
这是否意味着我们不能反悔,回到版本三呢?其实不是,可以使用git reflog,其记录了本地的每一个日志
ubuntu@VM-12-11-ubuntu:~/lesson/gitcode$ git reflog
7c61b82 (HEAD -> master) HEAD@{0}: commit: add three file:file1 file2 file3
0008577 HEAD@{1}: commit (initial): new file:ReadMe
查出来的是部分的commit id,Git 支持使用部分commit id实现回退
回退的效果图如下:

撤销修改
撤销修改在不同的场景下有不同的操作
场景一
只撤销工作区的修改
如果我们对工作区的代码进行了较大幅度的改动,但没有添加与提交,此时我们想撤销这些修改,如何操作呢?
手动修改一定是不推荐的,可能会出现该删的没删,不该删的删了的情况
使用git diff可以知道修改了什么,但还是需要手动修改,仍可能出现问题
Git 提供了 git checkout -- [file]命令让工作区的文件回到最近一次add或者commit时的状态,该命令一定要记得带上--,不然会是完全不一样的效果
git checkout -- [file]
场景二
只撤销暂存区的内容
直接使用git reset
git reset --mixed [commit id]
--mixed选项就是只回退暂存区内容
场景三
只撤销版本库的内容
直接使用git reset
git reset --hard HEAD^
使用--hard选项,只回退版本库内容,HEAD^表示回退到上一个版本
删除文件
在 Git 中,删除文件也是一次修改,可以使用add和commit,如果误删,那么还可以按照场景对修改进行撤销
Git 提供命令可以删除工作区文件,并add,也删除暂存区内容
git rm [file]
不过还没有提交,所以还需要git commit
如此,文件就从版本库中被删除了
以上就是本篇博客的所有内容,感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。

相关文章:
【Git】初识Git
本篇文章的环境是在 Ubuntu/Linux 环境下编写的 文章目录 版本控制器Git 基本操作安装 Git创建 Git 本地仓库配置 Git认识工作区、暂存区、版本库添加文件修改文件版本回退撤销修改删除文件 版本控制器 在日常工作和学习中,老板/老师要求我们修改文档,…...
vue3 透传 Attributes
前言 Vue 3 现在正式支持了多根节点的组件,也就是片段! Vue 2.x 遵循单根节点组件的规则,即一个组件的模板必须有且仅有一个根元素。 为了满足单根节点的要求,开发者会将原本多根节点的内容包裹在一个<div>元素中&#x…...
4.接口测试基础(Jmter工具/场景二:一个项目由多个人负责接口测试,我只负责其中三个模块,协同)
一、场景二:一个项目由多个人负责接口测试,我只负责其中三个模块,协同 1.什么是测试片段? 1)就相当于只是项目的一部分用例,不能单独运行,必须要和控制器(include,模块)一…...
electron react离线使用monaco-editor
目录 1.搭建一个 electron-vite 项目 2.安装monaco-editor/react和monaco-editor 3.引入并做monaco-editor离线配置 4.react中使用 5.完整代码示例 6.monaco-editor离线配置官方说明 7.测试 1.搭建一个 electron-vite 项目 pnpm create quick-start/electron 参考链接…...
Python 的 WSGI 简单了解
从 flask 的 hello world 说起 直接讨论 WSGI,很多人可能没有概念,我们还是先从一个简单的 hello world 程序开始吧。 from flask import Flaskapp Flask(__name__)app.route("/", methods[GET]) def index():return "Hello world!&q…...
基于stm32使用ucgui+GUIBuilder开发ui实例
1 项目需求 1.1 基于Tft 触摸屏实现一个自锁按键 1.2 按键在按下后背景色需要进行变化,以凸显当前按键状态(选中or 未选中) 1.3 按键选中时对某一gpio输出低电平,非选中时输出高电平 2 移植 ucgui UCGUI的文件数量很大&#x…...
Spring扩展点系列-ApplicationContextAwareProcessor
文章目录 简介源码分析示例代码示例一:扩展点的执行顺序运行示例一 示例二:获取配置文件值配置文件application.properties内容定义工具类ConfigUtilcontroller测试调用运行示例二 示例三:实现ResourceLoaderAware读取文件ExtendResourceLoad…...
基于Keil软件实现实时时钟(江协科技HAL库)
实时时钟实验是基于江协科技STM32的HAL库工程模板创建的(可以在作品“基于江科大STM32创建的HAL库工程模板”中的结尾处获取工程模板的百度网盘链接) 复制“OLED显示”的工程文件——“4-1 OLED显示屏”,并命名为“12-2 实时时钟 ”。打开工程,把下面的程序复制到相应的文…...
dedecms靶场(四种webshell姿势)
进入靶场 姿势一:过文件管理器上传WebShell 步骤一:登录后台 /dede 步骤二:核心-》文件式管理-》文件上传-》上传一句话木马 点击 步骤三:进行蚁剑连接 姿势二:修改模板文件拿WebShell 步骤一:模板-》默认…...
PHP:强大的Web开发语言
PHP:强大的Web开发语言 一、PHP 简介及优势 PHP 的基本概念 PHP(PHP: Hypertext Preprocessor)即 “超文本预处理器”,是一种通用开源脚本语言,最初由 Rasmus Lerdorf 于 1994 年创建。它可以在服务器上执行…...
06_Python数据类型_元组
Python的基础数据类型 数值类型:整数、浮点数、复数、布尔字符串容器类型:列表、元祖、字典、集合 元组 元组(Tuple)是一种不可变的序列类型,与列表类似,但有一些关键的区别。本质:只读的列表…...
【Vue】- ref获取DOM元素和购物车案例分析
文章目录 知识回顾前言源码分析1. ref2. 购物车案例分析3. 购物车计算、全选 拓展知识数据持久化localStorage 总结 知识回顾 前言 元素上使用 ref属性关联响应式数据,获取DOM元素 步骤 ● 创建 ref > const hRef ref(null) ● 模板中建立关联 > <h1 re…...
【AI大模型】ChatGPT模型原理介绍(下)
目录 🍔 GPT-3介绍 1.1 GPT-3模型架构 1.2 GPT-3训练核心思想 1.3 GPT-3数据集 1.4 GPT-3模型的特点 1.5 GPT-3模型总结 🍔 ChatGPT介绍 2.1 ChatGPT原理 2.2 什么是强化学习 2.3 ChatGPT强化学习步骤 2.4 监督调优模型 2.5 训练奖励模型 2.…...
Python数据分析与可视化实战指南
在数据驱动的时代,Python因其简洁的语法、强大的库生态系统以及活跃的社区,成为了数据分析与可视化的首选语言。本文将通过一个详细的案例,带领大家学习如何使用Python进行数据分析,并通过可视化来直观呈现分析结果。 一、环境准…...
react18基础教程系列-- 框架基础理论知识mvc/jsx/createRoot
react的设计模式 React 是 mvc 体系,vue 是 mvvm 体系 mvc: model(数据)-view(视图)-controller(控制器) 我们需要按照专业的语法去构建 app 页面,react 使用的是 jsx 语法构建数据层,需要动态处理的的数据都要数据层支持控制层: 当我们需要…...
牛客周赛 Round 60 折返跑(组合数学)
题目链接:题目 大意: 在 1 1 1到 n n n之间往返跑m趟,推 m − 1 m-1 m−1次杆子,每次都向中间推,不能推零次,问有多少种推法(mod 1e97)。 思路: 一个高中学过的组合数…...
深入浅出Java匿名内部类:用法详解与实例演示
匿名内部类(Anonymous Inner Class)在Java中是一种非常有用的特性,它允许你在一个类的定义中直接创建并实例化一个内部类,而不需要为这个内部类指定一个名字。匿名内部类通常用于以下几种情况: 实现接口:当…...
数据库MySQL、Mariadb、PostgreSQL、MangoDB、Memcached和Redis详细介绍
以下是一些常见的后端开发数据库选型: 关系型数据库(RDBMS):关系型数据库是最常见的数据库类型,使用表格和关系模型来存储和管理数据。常见的关系型数据库包括MySQL、PostgreSQL和Oracle等。这些数据库适合处理结构化数…...
【ArcGIS Pro实操第七期】栅格数据合并、裁剪及统计:以全球不透水面积为例
【ArcGIS Pro实操第七期】批量裁剪:以全球不透水面积为例 准备:数据下载ArcGIS Pro批量裁剪数据集1 数据拼接2 数据裁剪3 数据统计:各栅格取值3.1 栅格计算器-精确提取-栅格数据特定值3.2 数据统计 4 不透水面积变化分析 参考 准备࿱…...
【Linux】Image、zImage与uImage的区别
1、Image 1.1 什么是 Image Image 是一种未压缩的 Linux 内核镜像文件,包含了内核的所有代码、数据和必要的元信息。它是 Linux 内核在编译过程中生成的一个原始的二进制文件,未经过任何压缩或额外的封装处理。由于未压缩,Image 文件相对较…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
Spring Boot + MyBatis 集成支付宝支付流程
Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例(电脑网站支付) 1. 添加依赖 <!…...
热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...
Mac flutter环境搭建
一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...
数据挖掘是什么?数据挖掘技术有哪些?
目录 一、数据挖掘是什么 二、常见的数据挖掘技术 1. 关联规则挖掘 2. 分类算法 3. 聚类分析 4. 回归分析 三、数据挖掘的应用领域 1. 商业领域 2. 医疗领域 3. 金融领域 4. 其他领域 四、数据挖掘面临的挑战和未来趋势 1. 面临的挑战 2. 未来趋势 五、总结 数据…...
