Git的认识及基本操作
目录
一:Git的基本认识
二:Git的安装
三:Git的基本操作
1.创建本地仓库
2.配置Git
3.⼯作区、暂存区、版本库
4. 修改文件
5.版本回退
6.撤销修改
7.删除文件
一:Git的基本认识
1.实例引入
在日常当中我们常常会遇到这样的事,就是在做实验报告或者课设的时候,往往是一次性不能让老师满意的,需要我们反复的修改,如果有这样的情况,就是你的每次实验报告都是在上次的报告里直接修改的,没有对上次的实验报告进行保存,如果改到最后,老师让你拿前面写的实验报告的话,此时你肯定会拿不出来,因此为了防止这样的事情发生你需要保存每次修改的实验报告,但如果保存的次数多的话,对于每个版本都修改了什么,就会很容易导致不知道,对于项目中的代码也是如此
为了解决上述问题,就提出了版本控制器,用来记录每个版本的修改以及管理这些版本,而最主流的版本控制器就是Git
Git的再次认识:
Git是一个分布式版本控制系统,可以记录文件的修改历史,方便用户查看不同时间的版本
二:Git的安装
1.在Linux的centos下安装
查看在Linux下安装的Git版本: git --version
没有安装的话,就会显示找不到,安装有Git的话,就会显示对应的Git版本
卸载Git :sudo yum remove git -y
安装Git: sudo yum install git -y
2.在Linux的ubuntu下安装
查看安装的Git的版本: git --version
卸载Git : sudo apt-get remove git -y
安装Git : sudo apt-get install git -y
三:Git的基本操作
1.创建本地仓库
创建本地仓库的原因:经过上面的介绍,可以得知Git是一个版本控制器.如果想要对电脑/服务器上的文件进行一些记录,如修改的内容,版本迭代的详细内容时,就可以使用Git来追踪管理,但如果追踪或管理的文件在电脑/服务器的任意位置的话,Git是不能进行追踪管理的,要想追踪管理的话,就需要将文件放在Git的仓库当中,在仓库中的文件才能被Git追踪管理。即仓库是进⾏版本控制的⼀个⽂件⽬录。我们要想对⽂件进⾏版本控制,就必须先创建⼀个仓库出来。
在一个文件目录下创建仓库的操作
创建⼀个Git本地仓库对应的命令: git init
[mjwl@hcss-ecs-889f ~]$ mkdir gitcode #创建目录
[mjwl@hcss-ecs-889f ~]$ cd gitcode
[mjwl@hcss-ecs-889f gitcode]$ git init #创建本地仓库
Initialized empty Git repository in /home/mjwl/gitcode/.git/[mjwl@hcss-ecs-889f gitcode]$ ls -la
total 12
drwxrwxr-x 3 mjwl mjwl 4096 Oct 15 23:22 .
drwx------ 15 mjwl mjwl 4096 Oct 15 23:22 ..
drwxrwxr-x 7 mjwl mjwl 4096 Oct 15 23:22 .git
[mjwl@hcss-ecs-889f gitcode]$ tree .git
.git
├── branches
├── config
├── description
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ └── update.sample
├── info
│ └── exclude
├── objects
│ ├── info
│ └── pack
└── refs├── heads└── tags
当前⽬录下多了⼀个 .git 的隐藏⽂件, .git ⽬录是Git来跟踪管理仓库的
2.配置Git
当安装Git后⾸先要做的事情是设置你的⽤⼾名称和e-mail地址,这是⾮常重要的,如果不配置的话,在后面对本地仓库进行操作时就会出现一系列的问题以及报错
配置指令
git config (--global) user.name "对应用户名"
git config (--global) user.email "用户名对应邮箱"
查看配置选项的指令
git config -l
删除对应的配置选项指令
git config (--global) --unset user.name
git config (--global) --unset user.email
对应的--global是⼀个可选项。如果使⽤了该选项,表⽰这台机器上所有的Git仓库都会使⽤这个
配置,若配置时带--global的话,删除时必须带--global
3.⼯作区、暂存区、版本库
引例:在对应的有.git的本地仓库目录下创建一个普通的文件
[mjwl@hcss-ecs-889f gitcode]$ touch readme
[mjwl@hcss-ecs-889f gitcode]$ ls -a
. .. .git readme
此时是否可以直接使用Git来管理readme文件,答案是不可以,需要经过add和commit两步
⼯作区:在电脑上要写代码或⽂件的⽬录,此处readme文件所在的gitcode目录成为工作区
暂存区:英⽂叫stage或index。⼀般存放在 .git ⽬录下的index⽂件(.git/index)中,我们
把暂存区有时也叫作索引(index)
版本库:⼜名仓库,⼯作区有⼀个隐藏⽬录 .git ,它不算⼯作区,⽽是Git的版本库。这个版本库⾥⾯的所有⽂件都可以被Git管理起来,每个⽂件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”
三者之间的关系:
注:(1)在创建Git版本库时,Git会为我们⾃动创建⼀个唯⼀的master分⽀,以及指向master的⼀个指针叫HEAD
(2)通过新建或粘贴进⽬录的⽂件,并不能称之为向仓库中新增⽂件,⽽只是在⼯作区新增了⽂件。必须要通过使⽤ git add 和 git commit 命令才能将⽂件添加到仓库中进⾏管理
1.git add 与git commit操作
添加⼀个或多个⽂件到暂存区: git add file1 (file2) (file3) ...
添加指定⽬录到暂存区,包括⼦⽬录: git add dir
添加当前⽬录下的所有⽂件改动到暂存区: git add .
提交暂存区全部内容到本地仓库中: git commit -m "日志"
提交暂存区的指定⽂件到仓库区: git commit (file1) (file2)... -m "日志'
查看历史提交记录: git log /git log --pretty=oneline
我们看到的⼀⼤串类似 23807c5...56eed6 的是每次提交的 commit id (版本号),Git的 commit id 不是1,2,3……递增的数字,⽽是⼀个SHA1计算出来的⼀个⾮常⼤的数字,⽤⼗六进制表⽰
2.查看.git文件
我们先来查看.git的目录结构
[mjwl@hcss-ecs-889f gitcode]$ tree .git
.git
├── branches
├── config
├── description
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ └── update.sample
├── info
│ └── exclude
├── objects
│ ├── info
│ └── pack
└── refs├── heads└── tags
在上述的readme文件中写入对应内容,通过git add和git commit操作将工作区的修改内容添加到本地仓库当中,再tree .git查看.git文件
[mjwl@hcss-ecs-889f gitcode]$ vim readme
[mjwl@hcss-ecs-889f gitcode]$ cat readme
hello git
[mjwl@hcss-ecs-889f gitcode]$ git add .
[mjwl@hcss-ecs-889f gitcode]$ git commit -m "add file"
[master (root-commit) 989741d] add file1 file changed, 1 insertion(+)create mode 100644 readme
[mjwl@hcss-ecs-889f gitcode]$ tree .git
.git
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ └── update.sample
├── index
├── info
│ └── exclude
├── logs
│ ├── HEAD
│ └── refs
│ └── heads
│ └── master
├── objects
│ ├── 6e
│ │ └── 84d6a5ed71a327ba3376cac9801558d9ea2e80
│ ├── 8d
│ │ └── 0e41234f24b6da002d962a26c2495ea16a425f
│ ├── 98
│ │ └── 9741d5c4d2f8a9ef91ad5343bc04eedcdb0288
│ ├── info
│ └── pack
└── refs├── heads│ └── master└── tags
1).index 就是我们的暂存区,add后的内容都是添加到这⾥的。
2). HEAD 就是我们的默认指向master分⽀的指针,我们可以查看一下
[mjwl@hcss-ecs-889f gitcode]$ cat .git/HEAD
ref: refs/heads/master
那么上述HEAD指针指向的master中保存的是什么呢?
[mjwl@hcss-ecs-889f gitcode]$ cat .git/refs/heads/master
989741d5c4d2f8a9ef91ad5343bc04eedcdb0288
保存的就是当前最新的 commit id ,此时我们此时来打印日志来确认的
[mjwl@hcss-ecs-889f gitcode]$ git log
commit 989741d5c4d2f8a9ef91ad5343bc04eedcdb0288
Author: mjw <2090493145@qq.com>
Date: Wed Oct 16 19:07:56 2024 +0800add file
而一个commit id也可以看作一个git对象 ,我们可以来打印一下这个git对象中的内容
[mjwl@hcss-ecs-889f gitcode]$ git cat-file -p 989741d5c4d2f8a9ef91ad5343bc04eedcdb0288
tree 6e84d6a5ed71a327ba3376cac9801558d9ea2e80
author mjw <2090493145@qq.com> 1729076876 +0800
committer mjw <2090493145@qq.com> 1729076876 +0800add file
其中的parent后面的commit id是上次提交的commit id
对于打印的第一行还有个commit id,我们使用相同的方法进行查看得
[mjwl@hcss-ecs-889f gitcode]$ git cat-file -p 6e84d6a5ed71a327ba3376cac9801558d9ea2e80
100644 blob 8d0e41234f24b6da002d962a26c2495ea16a425f readme//对readme文件对应的commit id进行查看得
[mjwl@hcss-ecs-889f gitcode]$ git cat-file -p 8d0e41234f24b6da002d962a26c2495ea16a425f
hello git //这就是对readme文件的修改,在这里都被git保存了下来
每个提交的文件都对应一个commit id,commit id也是可以作为一种索引的,可以使用 git cat-file -p来查看这个索引所对应git对象中的内容,这个git对象也是被维护在对象库当中的,里面包含的是修改的内容
3).objects为Git的对象库,⾥⾯包含了创建的各种版本库对象及内容。当执⾏git add 命令时,暂存区的⽬录树被更新,同时⼯作区修改(或新增)的⽂件内容被写⼊到对象库中的⼀个新的
对象中,就位于".git/objects"⽬录下 ,我们可以查看得
[mjwl@hcss-ecs-889f gitcode]$ ls .git/objects/
6e 8d 98 info pack
查找object时要将 commit id 分成2部分,其前2位是⽂件夹名称,后38位是⽂件名称
总结在本地仓库中的几个特殊文件/目录
index:暂存区, git add 后会更新该内容。
• HEAD:默认指向master分⽀的⼀个指针。
• refs/heads/master:⽂件⾥保存当前 master 分⽀的最新 commit id 。
• objects:包含了创建的各种版本库对象及内容,可以简单理解为放了git维护的所有修改
3).对添加文件的再次理解
[mjwl@hcss-ecs-889f gitcode]$ touch file1
[mjwl@hcss-ecs-889f gitcode]$ git add file1
[mjwl@hcss-ecs-889f gitcode]$ touch file2
[mjwl@hcss-ecs-889f gitcode]$ git commit -m "add file"
[master bce0eaf] add file1 file changed, 0 insertions(+), 0 deletions(-)create mode 100644 file1
这里是新增两个文件,但改变的只有一个文件,这是因为 git add 是将⽂件添加到暂存区, git commit 是将暂存区的内容添加到本地仓库中 ,但我们没有进行git add file2,因此file2文件不被暂存区所维护的。所要解决的话,就是再执行git add file2 和git commit 操作
4. 修改文件
在这里我们可以在readme文件中新增一行,新增后我们该如何查看当前仓库的状态呢?
git status 命令⽤于查看在你上次提交之后是否有对⽂件进⾏再次修改
git diff [file] 命令⽤来显⽰暂存区和⼯作区⽂件的差异,显⽰的格式正是Unix通⽤的diff格
式。也可以使⽤ git diff HEAD -- [file] 命令来查看版本库和⼯作区⽂件的区别
当使用git diff命令后就可以查看到文件具体哪些地方做了修改,然后在进行git add和git commit操作提交到master分支下被Git追踪管理
[mjwl@hcss-ecs-889f gitcode]$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: readme
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# file2
no changes added to commit (use "git add" and/or "git commit -a")[mjwl@hcss-ecs-889f gitcode]$ git add .
[mjwl@hcss-ecs-889f gitcode]$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: file2
# modified: readme
#
git add 之后,就没有看到上⾯ no changes added to commit (use "git add"and/or "git commit -a") 的消息了。接下来让我们继续? git commit 即可
5.版本回退
Git是一个版本控制器,是可以管理文件的历史版本的,如果有需要是可以回退到以前的版本的,对应命令为 git reset,可以指定回退到某个提交的版本,接下来介绍具体的语法与用法
git reset 命令语法格式为: git reset [--soft | --mixed | --hard] [HEAD]
HEAD 说明:
◦ 可直接写成commit id,表⽰指定退回的版本
◦ HEAD 表⽰当前版本
◦ HEAD^ 上⼀个版本
◦ HEAD^^ 上上⼀个版本
◦ 以此类推...
可以使⽤ 〜数字表⽰:
◦ HEAD~0 表⽰当前版本
◦ HEAD~1 上⼀个版本
◦ HEAD^2 上上⼀个版本
◦ 以此类推...
对于上述的readme文件,第一版只有hello git,第二版(当前版本)是有hello git 和hello world,我们以此为例
实例二:
这时就不能根据commit id 进行回退了,因此我们可以采用git reflog来查询commit id进行回退,reflog是用来记录本地每次提交的命令
Git的版本回退速度⾮常快,因为Git在内部有个指向当前分⽀(此处是master)的HEAD指针, refs/heads/master ⽂件⾥保存当前 master 分⽀的最新 commit id 。当我们在回退版本的时候,Git仅仅是给refs/heads/master 中存储⼀个特定的version ,可以理解为以下的图
6.撤销修改
当我们不想操作当前版本,想直接回退到上个版本开始操作
对于撤销回退是分为三种情况的
情况⼀:对于⼯作区的代码,还没有 add
情况⼆:已经 add ,但没有 commit
情况三:已经 add ,并且也 commit 了(还没有进行push操作)
在这里在readme文件中添加一行xxx code的内容,具体这三种情况的解决方法为
git checkout -- [file] 命令让⼯作区的⽂件回到最近⼀次 add 或 commit 时的状态
7.删除文件
因为删除也是对文件的修改,所以删除文件有两种方式
1.使用rm命令删除文件,还需要 git add和git commit操作
2.使用git rm命令删除文件,再进行git commit操作
相关文章:

Git的认识及基本操作
目录 一:Git的基本认识 二:Git的安装 三:Git的基本操作 1.创建本地仓库 2.配置Git 3.⼯作区、暂存区、版本库 4. 修改文件 5.版本回退 6.撤销修改 7.删除文件 一:Git的基本认识 1.实例引入 在日常当中我们常常会遇到这样的事,就是在做实验报告或者课设…...

python 日志库loguru
python 日志库loguru 安装 pip install loguru最简单的基本使用 from loguru import loggerlogger.success("Hello from success!") logger.info("Hello from info!") logger.debug("Hello from debug!") logger.warning("Hello from wa…...

基于SpringBoot+Vue+uniapp的在线招聘平台的详细设计和实现
详细视频演示 请联系我获取更详细的演示视频 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…...

Chrome谷歌浏览器加载ActiveX控件之JT2Go控件
背景 JT2Go是一款西门子公司出品的三维图形轻量化预览解决工具,包含精确3D测量、基本3D剖面、PMI显示和改进的选项过滤器等强大的功能。JT2Go控件是一个标准的ActiveX控件,曾经主要在IE浏览器使用,由于微软禁用IE浏览器,导致JT2Go…...
Java基础概览和常用知识(七)
什么是自动装箱和自动拆箱,原理是什么? 自动装箱和自动拆箱是Java编程语言中的两个重要概念,它们涉及到基本数据类型与其对应包装类之间的自动转换。 一、定义 自动装箱:是指Java编译器在需要将基本数据类型转换为对应的包装类…...

STL-string
STL的六大组件: string // string constructor #include <iostream> #include <string> using namespace std; int main() {// 构造std::string s0("Initial string");std::string s1; //nullptrstd::string s2("A character sequenc…...
数据库基础-学习版
目录 数据库巡检清理表空间高水位处理重建索引扩展字段异常恢复处置常见命令汇总 数据库巡检 数据库巡检的主要目的是确保数据库的健康状态、性能和安全,及时发现潜在的问题。 一 数据库状态检查 查看数据库列表:SHOW DATABASES; 检查当前数据库SELECT DATABASE(); 检查数据…...
【Gin】Gin框架介绍和使用
一、简单使用Gin框架搭建一个服务器 package mainimport ("github.com/gin-gonic/gin" )func main() {// 创建一个默认的路由引擎r : gin.Default()// GET 请求方法r.GET("/hello", func(c *gin.Context) {// c.JSON 返回的是JSON格式的数据c.JSON(200, g…...
AI大模型带来哪些创业机遇?
AI 大模型的快速发展带来了许多创新和创业机遇,涵盖了从行业应用到基础设施优化的方方面面。以下是一些具体的创业机会: 1、垂直行业应用 大模型可以根据不同行业的需求进行定制和优化,提供高度专业化的 AI 解决方案。 医疗领域:…...

[Linux] 层层深入理解文件系统——(3)磁盘组织存储的文件
标题:[Linux] 层层深入理解文件系统——(3)磁盘组织组织存储的文件 个人主页水墨不写bug 目录 一、磁盘中的文件 1)磁盘的物理结构 2)磁盘的CHS寻址法 3)磁盘的空间管理 二、磁盘如何组织存储文件 三…...
Apache Cordova学习计划
Apache Cordova(之前称为 PhoneGap): 1. PhoneGap的起源:2008年8月,PhoneGap在旧金山的iPhoneDevCamp上首次亮相,由Nitobe公司开发,目的是“为跨越Web技术和iPhone之间的鸿沟牵线搭桥”。 2. Ph…...
Unity学习日志-API
Untiy基本API 角度旋转自转相对于某一个轴 转多少度相对于某一个点转练习 角度 this.transform.rotation(四元数)界面上的xyz(相对于世界坐标) this.transform.eulerAngles;相对于父对象 this.transform.localEulerAngles;设置角度和设置位置一样,不能单独设置xz…...

Java基础常见面试题总结(上)
基础概念与常识 Java 语言有哪些特点? 简单易学(语法简单,上手容易);面向对象(封装,继承,多态);平台无关性( Java 虚拟机实现平台无关性)&…...

4 -《本地部署开源大模型》在Ubuntu 22.04系统下部署运行ChatGLM3-6B模型
在Ubuntu 22.04系统下部署运行ChatGLM3-6B模型 大模型部署整体来看并不复杂,且官方一般都会提供标准的模型部署流程,但很多人在部署过程中会遇到各种各样的问题,很难成功部署,主要是因为这个过程会涉及非常多依赖库的安装和更新及…...

本地如何使用Pycharm连接远程服务器调试torchrun
pycharm 远程连接服务器并且debug, 支持torch.distributed.launch debug_pycharm远程debug-CSDN博客 上面这个博客写的真的非常好,记录一下,需要注意该博主的主机为mac 本人可调试版本为: 可直接运行版本为:...
Visual Studio 2022常用快捷键
1. 基本编辑快捷键 Ctrl X:剪切选中内容Ctrl C:复制选中内容Ctrl V:粘贴内容Ctrl Z:撤销Ctrl Y:重做Ctrl Shift L:删除当前行Ctrl K, Ctrl C:注释选中的代码Ctrl K, Ctrl U…...

mysql innodb 引擎如何直接复制数据库文件?
mysql innodb 引擎如何直接复制数据库文件?介绍如下: 1、首先找到数据库文件所在位置 一般可以看my.conf/my.ini配置的文件的“datadir” 看示例: “MAMP”在Macos下的数据库文件位置: /Library/Application Support/appsolu…...
python中的global和nonlocal关键字以及闭包和模块
global i 这样的用法在于 Python 中,但需要在一个函数内部使用,以便将变量 i 声明为全局变量。让我们来详细讲解一下它的用法。 什么是全局变量? 全局变量是指在函数外部定义的变量,可以在任何函数中访问和修改。如果你需要在函数…...

LabVIEW风机滚动轴承监测系统
矿井主通风机作为矿井中最重要的通风设备,一旦出现故障,不仅会影响矿井内的空气质量,还可能引发安全事故。研究表明,通风机中约30%的故障是由轴承问题引起的。因此,能够实时监控矿井主通风机轴承状态的系统,…...
第1节 什么是鸿蒙系统
鸿蒙系统(HarmonyOS)是华为公司发布的一款基于微内核的面向全场景的分布式操作系统。以下是对它的具体介绍: 1. 核心特点: • 分布式能力:这是鸿蒙系统的核心优势之一。它能够将多种不同类型的智能终端设备连接起来&a…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...

ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...