从 Git 到 GitHub - 使用 Git 进行版本控制 - Git 常用命令
希望本贴能从零开始带您一起学习如何使用 Git 进行版本控制,并结合远程仓库 GitHub。这会是一个循序渐进的指南,我们开始吧!
学习 Git 和 GitHub 的路线图:
- 理解核心概念:什么是版本控制?Git 是什么?GitHub 是什么?
- 安装 Git
- 配置 Git
- 本地仓库操作:创建仓库、暂存、提交、查看历史、分支、合并
- GitHub 远程仓库操作:注册 GitHub、创建远程仓库、连接本地与远程、推送、克隆、拉取
- 基本协作流程 (简介):Fork、Pull Request
- 好习惯和下一步
- 视频教程 (可视化git很推荐):Git + GitHub 10分钟完全入门
- 安装教程 (非常推荐):Git 详细安装教程(详解 Git 安装过程每一步)
第一部分:理解核心概念
-
什么是版本控制 (Version Control System, VCS)?
- 想象一下你在写一篇重要的文档或代码。你可能会保存多个版本,比如
report_v1.doc
,report_v2.doc
,report_final.doc
,report_final_really_final.doc
。 - 版本控制系统就是一个能帮你自动追踪文件修改历史的工具。它记录了谁、在什么时候、对什么文件做了什么修改。
- 好处:
- 历史追溯:可以查看任何历史版本。
- 错误恢复:如果不小心改错了,可以轻松回滚到之前的某个版本。
- 团队协作:多人可以同时在同一个项目上工作,而不会互相覆盖对方的修改。
- 分支开发:可以创建“分支”来尝试新功能或修复 bug,而不影响主线开发。
- 想象一下你在写一篇重要的文档或代码。你可能会保存多个版本,比如
-
Git 是什么?
- Git 是目前世界上最先进、最流行的分布式版本控制系统。
- 分布式意味着每个开发者都拥有项目完整的历史副本,不像集中式版本控制系统那样需要时刻连接中央服务器。这使得离线工作和更快的操作成为可能。
- 它由 Linux 的创始人 Linus Torvalds 开发,最初是为了管理 Linux 内核的开发。
-
GitHub 是什么?
- GitHub 是一个基于网页的 Git 版本库托管服务。
- 它为你的 Git 仓库提供了一个远程存储空间,并提供了许多协作功能,如问题跟踪、代码审查 (Pull Requests)、项目管理等。
- 简单来说:Git 是工具,GitHub 是平台 (或服务)。你可以只在本地使用 Git,但结合 GitHub 可以更好地备份、分享和协作。
- 类似的平台还有 GitLab, Bitbucket 等。
第二部分:安装 Git
- Windows:
- 访问 https://git-scm.com/download/win 下载 Git for Windows。
- 具体可参考这篇全网最佳的Git安装教程 (非常推荐):
Git 详细安装教程(详解 Git 安装过程每一步)
* 运行安装程序,大部分选项保持默认即可。建议勾选 “run with bash” (在右键菜单中添加 Git Bash 选项) 和 “Add Git Bash for Windows Terminal” (如果你想在 终端 (Terminal) 或 命令提示符 (Command Prompt) 中使用)。
- macOS:
- 最简单的方式是安装 Xcode Command Line Tools。打开终端 (Terminal),输入
git --version
。如果没安装,系统会提示你安装。 - 或者通过 Homebrew 安装:
brew install git
- 也可以从 https://git-scm.com/download/mac 下载安装包。
- 最简单的方式是安装 Xcode Command Line Tools。打开终端 (Terminal),输入
- Linux (Debian/Ubuntu):
- 打开终端,输入:
sudo apt update && sudo apt install git
- 打开终端,输入:
- 验证安装:
- 安装完成后,打开终端 (Windows 用户可以使用 Git Bash),输入以下命令查看 Git 版本:
如果显示出版本号,说明安装成功。git --version
- 安装完成后,打开终端 (Windows 用户可以使用 Git Bash),输入以下命令查看 Git 版本:
第三部分:配置 Git
在你开始使用 Git 之前,需要设置你的用户名和邮箱地址。这些信息会附加到你的每一次提交 (commit) 中,用于标识是谁做的修改。
打开终端 (或 Git Bash),执行以下命令,将引号中的内容替换为你自己的信息:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
--global
表示这个配置对你在这台电脑上的所有 Git 仓库都生效。- 你可以通过以下命令检查配置是否成功:
git config --list
第四部分:本地仓库操作
现在我们开始在你的电脑上使用 Git。
-
创建一个新项目文件夹 (或进入已有项目文件夹)
mkdir my-git-project # 创建一个名为 my-git-project 的文件夹 cd my-git-project # 进入该文件夹
-
初始化 Git 仓库 (
git init
)
在你的项目文件夹中,执行以下命令将其初始化为一个 Git 仓库:git init
这会在当前目录下创建一个隐藏的
.git
子目录,它包含了 Git 仓库的所有元数据和对象数据库。 -
Git 的三个区域 (重要概念)
- 工作区 (Working Directory):你实际看到和编辑文件的项目文件夹。
- 暂存区 (Staging Area / Index):一个特殊的文件,它保存了下次将要提交的文件列表信息。你可以选择性地将工作区的修改添加到暂存区。
- 本地仓库 (Local Repository / .git directory):Git 用来保存项目元数据和对象数据库的地方。当你执行
git commit
时,暂存区的文件快照会被永久地储存在本地仓库中。
基本流程是: 在工作区修改文件 -> 将修改添加到暂存区 -> 将暂存区的修改提交到本地仓库。
-
检查状态 (
git status
)
这个命令非常重要,它会告诉你当前仓库的状态:哪些文件被修改了?哪些文件在暂存区?等等。git status
刚初始化的仓库,它会提示你没有可提交的内容,但可能有未跟踪的文件。
-
创建和修改文件
现在,我们在项目里创建一个文件,比如readme.md
:echo "# My Awesome Project" > readme.md echo "This is a project to learn Git and GitHub." >> readme.md
再次运行
git status
,你会看到readme.md
被列为 “Untracked files” (未跟踪文件)。 -
添加到暂存区 (
git add
)
要让 Git 开始追踪这个文件并准备提交它的当前版本,你需要使用git add
命令。- 添加指定文件:
git add readme.md
- 添加所有已修改或新增的文件:
git add .
现在再运行
git status
,你会看到readme.md
被列为 “Changes to be committed” (待提交的更改)。 - 添加指定文件:
-
提交到本地仓库 (
git commit
)
将暂存区的内容提交到本地仓库,形成一个新的版本快照。每次提交都需要一个有意义的提交信息 (commit message),说明这次提交做了什么。git commit -m "Initial commit: Add readme.md"
-m
选项后面跟着的是提交信息。- 良好的提交信息非常重要!
现在运行
git status
,会提示 “nothing to commit, working tree clean” (没有东西要提交,工作区是干净的)。 -
查看提交历史 (
git log
)
查看项目的提交记录:git log
你会看到你刚才的提交,包含提交哈希值 (一个唯一的ID)、作者、日期和提交信息。
- 按
q
退出git log
的查看。 git log --oneline
会显示更简洁的日志。
- 按
-
进行更多修改并提交
让我们修改readme.md
并添加一个新文件main.py
。echo "More details about the project." >> readme.md echo "print('Hello, Git!')" > main.py
运行
git status
,你会看到readme.md
被修改 (modified),main.py
是未跟踪的。git add . # 或者 git add readme.md main.py git commit -m "Add main.py and update readme"
再次查看
git log --oneline
,你会看到两条提交记录。 -
分支 (Branching)
分支允许你在不影响主开发线 (通常是main
或master
分支) 的情况下进行开发、实验新功能或修复 bug。-
查看分支 (
git branch
):git branch
你会看到一个名为
main
(或master
) 的分支,并且前面有一个*
号,表示你当前所在的分支。 -
创建新分支 (
git branch <branch-name>
):git branch feature-login
这创建了一个名为
feature-login
的新分支,它基于你当前所在的分支。 -
切换分支 (
git checkout <branch-name>
或git switch <branch-name>
):
git switch
是较新的命令,推荐使用。git switch feature-login
现在你就在
feature-login
分支上了。git branch
会显示* feature-login
。 -
在分支上工作:
现在你在feature-login
分支上做的任何修改和提交都只属于这个分支,不会影响main
分支。echo "print('Login functionality')" > login.py git add login.py git commit -m "Add basic login feature structure"
-
-
合并分支 (
git merge
)
当你完成了在feature-login
分支上的工作,并且测试通过后,你可能想把它合并回main
分支。-
首先,切换回目标分支 (通常是
main
):git switch main
-
然后,执行合并命令:
git merge feature-login
Git 会尝试自动合并
feature-login
分支的更改到main
分支。- 如果顺利,
main
分支现在就包含了feature-login
的所有提交。 - 冲突 (Conflict):如果两个分支修改了同一个文件的同一部分,Git 可能无法自动合并,这时会发生冲突。你需要手动解决冲突,然后再次提交。 (解决冲突是进阶内容,这里先了解概念)
- 如果顺利,
-
删除已合并的分支 (可选):
一旦分支被合并并且不再需要,可以删除它:git branch -d feature-login
-
第五部分:GitHub 远程仓库操作
现在,我们将本地的 Git 仓库连接到 GitHub 上的远程仓库,以便备份、分享和协作。
-
注册 GitHub 账号
如果你还没有 GitHub 账号,请访问 https://github.com/ 注册一个。 -
在 GitHub 上创建新的远程仓库
- 登录 GitHub。
- 点击右上角的 “+” 号,选择 “New repository”。
- Repository name: 给你的仓库起个名字 (例如,
my-git-project
,最好和本地文件夹名一致,但非必需)。 - Description (optional): 简单描述你的项目。
- Public / Private: Public 仓库任何人都可以看到,Private 仓库只有你和你授权的人可以看到。初学建议 Public。
- Initialize this repository with:
- 不要勾选 “Add a README file”、“Add .gitignore” 或 “Choose a license”,因为我们本地已经有项目了,并且想把本地项目推送上去。如果勾选了,远程仓库会有初始提交,会和你本地仓库的初始提交不一致,导致推送复杂化。
- 点击 “Create repository”。
-
连接本地仓库到远程仓库 (
git remote add
)
创建仓库后,GitHub 会显示一些指令。找到 “…or push an existing repository from the command line” 部分,那里有你的远程仓库 URL (通常是 HTTPS 或 SSH 格式)。我们用 HTTPS 格式。在你的本地项目文件夹的终端中,执行:
git remote add origin https://github.com/YOUR_USERNAME/YOUR_REPOSITORY_NAME.git
- 将
YOUR_USERNAME
替换为你的 GitHub 用户名。 - 将
YOUR_REPOSITORY_NAME.git
替换为你在 GitHub 上创建的仓库名 (如my-git-project.git
)。 origin
是这个远程仓库的默认别名。你可以有多个远程仓库,并给它们不同的别名。
你可以用
git remote -v
查看已配置的远程仓库。 - 将
-
推送本地更改到远程仓库 (
git push
)
现在,将你本地main
分支的所有提交推送到 GitHub 上的origin
远程仓库。git push -u origin main
push
: 推送命令。-u
(或--set-upstream
): 这个选项会将本地的main
分支与远程的origin/main
分支关联起来。这样,以后你在这个分支上执行git push
或git pull
时,就不需要再指定远程仓库和分支名了。第一次推送时建议使用-u
。origin
: 远程仓库的别名。main
: 你要推送的本地分支名。
执行此命令时,Git 可能会提示你输入 GitHub 的用户名和密码 (或者 Personal Access Token,对于 HTTPS 而言,密码方式逐渐被弃用,推荐使用 Token)。
推送成功后,刷新你在 GitHub 上的仓库页面,就能看到你的文件和提交历史了!
-
克隆远程仓库 (
git clone
)
如果你想在另一台电脑上获取 GitHub 上的项目,或者你想获取别人的公开项目,可以使用git clone
。- 在 GitHub 上找到你想克隆的仓库。
- 点击绿色的 “Code” 按钮,复制 HTTPS 或 SSH URL。
- 在你的电脑上,打开终端,
cd
到你想要存放项目的目录下,然后执行:git clone https://github.com/SOMEONE_ELSE/SOME_REPOSITORY.git
这会将整个项目 (包括所有历史记录) 下载到你的电脑上,并自动设置好名为
origin
的远程仓库指向。 -
从远程仓库拉取更新 (
git pull
)
如果远程仓库有了新的提交 (比如你的同事推送了更新,或者你在 GitHub 网站上直接做了修改),你需要将这些更新拉取到你的本地仓库。
在你的本地项目文件夹中,确保你在正确的分支上 (例如main
):git pull origin main
如果之前推送时用了
-u
选项,可以简化为:git pull
git pull
实际上是git fetch
(从远程获取最新版本库数据) 和git merge
(将远程分支合并到当前本地分支) 两个命令的组合。
第六部分:基本协作流程 (简介)
当多人协作或参与开源项目时,通常会用到以下流程:
-
Fork (分叉):
- 如果你想为一个你没有直接写入权限的 GitHub 项目做贡献,你可以先 “Fork” 这个项目。
- Fork 操作会在你的 GitHub 账号下创建一个该项目的完整副本。
-
Clone (克隆):
- 将你 Fork 后的仓库 (即你账号下的那个副本) 克隆到你的本地电脑。
git clone https://github.com/YOUR_USERNAME/FORKED_REPOSITORY.git
-
创建分支、修改、提交、推送:
- 在你的本地仓库中创建一个新分支来进行修改。
- 完成修改后,提交到本地仓库。
- 将你的本地分支推送到你 Fork 的远程仓库 (即
origin
,指向你 GitHub 账号下的副本)。git push origin your-feature-branch
-
Pull Request (PR / 合并请求):
- 回到你 Fork 的 GitHub 仓库页面,你会看到一个提示,可以基于你刚推送的分支创建一个 “Pull Request”。
- Pull Request 是请求原项目维护者将你的修改合并到他们的主项目中。
- 在 PR 中,你可以描述你的修改,项目维护者可以审查你的代码,提出评论或要求修改,最终决定是否合并。
这是 GitHub 协作的核心。
第七部分:好习惯和下一步
- 频繁提交,提交信息清晰:
- 每次完成一个小功能或修复一个小 bug 就进行一次提交。
- 提交信息要清晰地描述你做了什么。例如:“Fix: User login button unresponsive” 或 “Feat: Add password reset functionality”。
- 经常拉取更新: 在开始新工作前,或准备推送前,先
git pull
获取远程最新代码,避免冲突。 - 使用分支: 不要直接在
main
分支上进行大量开发,为新功能、bug 修复等创建专门的分支。 - .gitignore 文件:
- 在项目中创建一个名为
.gitignore
的文件,列出那些你不想让 Git 追踪的文件或文件夹 (例如编译产生的文件、日志文件、IDE 配置文件、敏感信息如 API 密钥等)。 - 例如,一个 Python 项目的
.gitignore
可能包含:__pycache__/ *.pyc .env venv/
- GitHub 提供了很多语言和框架的
.gitignore
模板。
- 在项目中创建一个名为
下一步学习:
- 解决合并冲突
git rebase
(另一种合并分支的方式,可以使历史更线性)git stash
(临时保存未提交的更改)git reset
和git revert
(撤销提交)- 标签 (Tagging versions, e.g.,
v1.0
) - 更高级的 GitHub 功能 (Issues, Actions, Projects)
- Git GUI 客户端 (如 Sourcetree, GitHub Desktop, VS Code 自带的 Git 工具),它们可以提供图形化界面,有时更直观。
这是一个相当全面的入门指南。关键是动手实践!创建一个测试项目,按照上面的步骤一步步操作,多用 git status
和 git log
来观察变化。祝你学习愉快!遇到问题随时可以提问 GPT,通过与GPT多轮问答,可以学到几乎所有公开知识。
相关文章:

从 Git 到 GitHub - 使用 Git 进行版本控制 - Git 常用命令
希望本贴能从零开始带您一起学习如何使用 Git 进行版本控制,并结合远程仓库 GitHub。这会是一个循序渐进的指南,我们开始吧! 学习 Git 和 GitHub 的路线图: 理解核心概念:什么是版本控制?Git 是什么&…...
何时需要import css文件?怎么知道需要导入哪些css文件?为什么webpack不提示CSS导入?(导入css导入规则、css导入规范)
文章目录 何时需要import css文件?**1. 使用模块化工具(如 Webpack、Vite、Rollup 等)****适用场景:****示例:****优点:** **2. 动态加载 CSS(按需加载)****适用场景:***…...

双指针算法详解(含力扣和蓝桥杯例题)
目录 一、双指针算法核心概念 二、常用的双指针类型: 2.1 对撞指针 例题1:盛最多水的容器 例题2:神奇的数组 2.2 快慢指针: 例题1:移动零 例题2:美丽的区间(蓝桥OJ1372) 3.总…...

【网络编程】二、UDP网络套接字编程详解
文章目录 前言Ⅰ. UDP服务端一、服务器创建流程二、创建套接字 -- socketsocket 属于什么类型的接口❓❓❓socket 是被谁调用的❓❓❓socket 底层做了什么❓❓❓和其函数返回值有没有什么关系❓❓❓ 三、绑定对应端口号、IP地址到套接字 -- bind四、数据的发送和接收 -- sendto…...

【应急响应】- 日志流量如何分析?
【应急响应】- 日志流量如何下手?https://mp.weixin.qq.com/s/dKl8ZLZ0wjuqUezKo4eUSQ...
虚拟机设置NAT没网笔记
查看任务管理器的时候发现,VMware NAT Service 进程都没有,貌似是因为之前我给禁了,emmmmmm 1确认虚拟机网络设置的NAT模式 打开 VMware Workstation,点击 编辑 > 虚拟网络编辑器 确保 VMnet8 配置为 NAT 模式: …...

djinn: 3靶场渗透
djinn: 3 来自 <https://www.vulnhub.com/entry/djinn-3,492/> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182,靶场IP192.168.23.243 3࿰…...

VS Code配置指南:打造高效的QMK开发环境
VS Code配置指南:打造高效的QMK开发环境 前言 你是否曾为QMK固件开发环境的搭建而头疼不已?本文将手把手教你使用Visual Studio Code(简称VS Code)这款强大的代码编辑器来构建一个完美的QMK开发环境,让你的键盘固件开…...

服务器多客户端连接核心要点(1)
刷题 服务器多客户端连接核心要点 多进程服务器 实现原理 fork子进程:每次accept新客户端后,调用fork创建子进程。独立处理:子进程负责与客户端通信(如read/write),父进程继续监听新连接。 特点 隔离性…...
【Python-Day 11】列表入门:Python 中最灵活的数据容器 (创建、索引、切片)
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...

Stagehand:AI驱动的下一代浏览器自动化框架
Stagehand 是一个结合了 AI 代理、AI 工具和 Playwright 的浏览器自动化框架。核心理念是:让自动化任务既可控又智能。与传统工具不同,Stagehand 不仅仅依赖 AI 代理的“黑箱操作”,而是通过与 Playwright 的深度结合,赋予开发者对…...
实现线程的4种方法
知识点详细说明 在Java中,实现线程的常用方法有以下四种: 1. 继承Thread类 核心要点: 定义一个类继承Thread,重写run()方法。通过调用start()启动线程(自动执行run())。关键细节: 单继承限制:Java不支持多继承,若类已继承其他类,无法再继承Thread。线程对象直接使用…...

爱普生FA-238在车身控制模块中的应用
在汽车智能化、电子化飞速发展的当下,车身控制模块(BCM)作为车辆的 “智能管家”,肩负着协调和控制众多车身功能的重任,从车门的解锁与锁定、车窗的升降,到车灯的智能点亮与熄灭,再到雨刮器的自…...
单片机嵌入式按键库
kw_btn库说明 本库主要满足嵌入式按键需求,集成了常用的按键响应事件:高电平、低电平、上升沿、下降沿、单击、双击、长按键事件。可以裸机运行,也可以配合实时操作系统运行。 本库开源连接地址:连接 实现思路 本库采用C语言进行…...

【A2A】管中窥豹,google源码python-demo介绍
前言 A2A(Agent2Agent)是 Google 推出的一项新协议,旨在解决多智能体(Multi-Agent)系统中跨平台、跨组织协作的难题。它为 AI 代理之间的通信、协作和任务分工提供了一个统一的标准,可以类比为网页世界的 H…...

004-nlohmann/json 快速认识-C++开源库108杰
了解 nlohmann/json 的特点;理解编程中 “数据战场”划分的概念;迅速上手多种方式构建一个JSON对象; 1 特点与安装 nlohmann/json 是一个在 github 长期霸占 “JSON” 热搜版第1的CJSON处理库。它的最大优点是与 C 标准库的容器数据…...

Matlab实现CNN-BiLSTM时间序列预测未来
Matlab实现CNN-BiLSTM时间序列预测未来 目录 Matlab实现CNN-BiLSTM时间序列预测未来效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CNN-BiLSTM时间序列预测未来; 2.运行环境Matlab2023b及以上,data为数据集,单变量时间序…...

C语言| sizeof(array)占多少字节
C语言| 数组名作为函数参数 sizeof(数组名); 可以求出整个数组在内存中所占的字节数。 被调函数Array_Sum()中,数组array使用sizeof会得到多少? 实参数组a占32字节,实参a传给形参array,只占4字节。 原因如下: 数组名做…...

【文件系统—散列结构文件】
文章目录 一、实验目的实验内容设计思路 三、实验代码实现四、总结 一、实验目的 理解linux文件系统的内部技术,掌握linux与文件有关的系统调用命令,并在此基础上建立面向随机检索的散列结构文件;## 二、实验内容与设计思想 实验内容 1.设…...

World of Warcraft [CLASSIC][80][Deluyia] [Fragment of Val‘anyr]
瓦兰奈尔的碎片 [Fragment of Valanyr] 有时候下个班打个游戏,没想到套路也这么多,唉,何况现实生活,这一个片版本末期才1000G,30个,也就30000G,时光徽章等同月卡15000G,折合一下也就…...

数组和指针典型例题合集(一维数组、字符数组、二维数组)
1.一维数组 数组名的理解 数组名是数组首元素(第一个元素)的地址 但是有两个例外: 1.sizeof (数组名)—— 数组名表示整个数组,就算的是整个数组的大小,单位是字节。 2.&数组名 —— 数…...

地级市-机器人、人工智能等未来产业水平(2009-2023年)-社科数据
地级市-机器人、人工智能等未来产业水平(2009-2023年)-社科数据https://download.csdn.net/download/paofuluolijiang/90623814 https://download.csdn.net/download/paofuluolijiang/90623814 此数据集统计了2009-2023年全国地级市在机器人、人工智能等…...

epub格式转txt格式工具,txt批量转PDF
epub格式转txt格式工具,功能如图: txt格式批量转PDF 参考原文:epub格式转txt格式工具,txt批量转PDF 轻轻一点就关注, 好运连连挡不住,点个关注吧。...

电赛经验分享——模块篇
1、前言 打算在这一个专栏中,分享一些本科控制题电赛期间的经验,和大家共同探讨,也希望能帮助刚刚参加电赛的同学,了解一些基本的知识。一些见解和看法可能不同或有错误,欢迎批评指正。 在本文中,主要介绍笔…...
前端面试宝典---JavaScript import 与 Node.js require 的区别
import 和 require 来自不同的规范: import 是 ES6(ECMAScript 2015)模块系统的一部分,是 JavaScript 语言的标准语法 require 是 CommonJS 规范的一部分,最初为 Node.js 环境设计 加载方式: require() …...

JVM之内存管理(一)
部分内容来源:JavaGuide二哥Java 图解JVM内存结构 内存管理快速复习 栈帧:局部变量表,动态链接(符号引用转为真实引用),操作数栈(存储中间结算结果),方法返回地址 运行时…...

鸿蒙编译boost整合linux跨平台应用
openharmony deveco 4.1支持armeabi-v7a deveco 5.0后不支持arm32位系统 boost编译 使用deveco的写cmake集成boost boost使用1.88的最新版本,带cmake工具链 https://github.com/boostorg/boost.git boost的源码都在sub_module中 deveco 4.1的版本sdk最高到9&am…...

rabbitMQ消息问题与解决
rabbitMQ 消息顺序性、消息幂等性、消息不丢失、最终一致性、补偿机制、消息队列设计 1.消息顺序性 溯源: 消息队列中的若干消息如果是对同一个数据进行操作,这些操作具有前后的关系,必须要按前后的顺序执行,否则就会造成数据异常…...

Java SE(10)——抽象类接口
1.抽象类 1.1 概念 在之前讲Java SE(6)——类和对象(一)的时候说过,所有的对象都可以通过类来抽象。但是反过来,并不是说所有的类都是用来抽象一个具体的对象。如果一个类本身没有足够的信息来描述一个具体的对象,而…...
MySQL数据库故障排查与解决方案
一、故障排查流程图 #mermaid-svg-hF8hhP2lrqWDbNhV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hF8hhP2lrqWDbNhV .error-icon{fill:#552222;}#mermaid-svg-hF8hhP2lrqWDbNhV .error-text{fill:#552222;stroke:…...