当前位置: 首页 > news >正文

Git | git revert命令详解

关注:CodingTechWork

引言

  Git 是一个强大的版本控制工具,广泛应用于现代软件开发中。它为开发人员提供了多种功能来管理代码、协作开发和版本控制。在 Git 中,有时我们需要撤销或回退某些提交,而git revert 是一个非常有用的命令。与git reset等命令不同,git revert能够通过创建新的提交来撤销历史提交,保证项目历史的完整性。
  在本篇文章中,我们将详细介绍 Git 中 git revert 的使用方式、工作原理、实战示例以及一些注意事项。

git revert介绍

  git revert用于撤销一个已经提交到 Git 仓库的更改。不同于git resetgit revert会通过创建一个新的提交“反转”指定提交的内容,而不会改变历史提交的记录。因此,git revert 是一种更安全的回退操作,适用于团队合作中,因为它不会影响历史提交的结构。

git revert 的工作原理

git revert原理:

  1. 生成新的提交git revert 会创建一个新的提交,内容是要撤销的提交的“反操作”。也就是说,git revert 会通过相反的改动来撤销指定提交的更改。例如,如果原来提交中增加了某些代码行,git revert会通过删除这些行来撤销该提交。
  2. 保持项目历史的完整性:与git reset可能修改项目历史不同,git revert不会删除任何提交,而是通过新的提交来记录撤销操作,从而保证了版本历史的完整性。这使得它特别适用于公共分支(如 mastermain 分支)。

执行步骤

  1. Git 会根据指定的提交,计算出需要反向操作的更改。
  2. 创建一个新的提交,将这些反向更改应用到当前工作区。
  3. 你可以选择是否修改提交信息(默认信息为“Revert ”)。
  4. 提交反向更改,新的提交将插入到当前分支历史中。

git revert 的常见用法

撤销单个提交

假设我们在分支上做了多次提交,其中有一个提交包含了不需要的更改。使用 git log 查看提交历史:

git log --oneline

输出结果可能是这样的:

a1b2c3d (HEAD -> master) Added new feature
a1342cf Fixed bug in feature X
d4e5f6g Added README file

如果你想撤销某个特定提交,可以直接指定该提交的哈希值(commit hash)来执行git revert

git revert <commit-hash>

例如,如果你想撤销提交 a1b2c3d,可以运行以下命令:

git revert a1b2c3d

Git 会自动生成一个新的提交,反向应用 a1b2c3d 提交中的修改,并提示你输入提交消息。

撤销多个提交

如果你需要撤销一系列提交,可以使用 git revert-n--no-commit选项,它会将所有反向更改暂时保存在暂存区中,但不会立即提交。你可以手动编辑这些更改,并最终一起提交。

git revert -n <commit-hash1>^..<commit-hash2>
  • <commit-hash1>^..<commit-hash2> 表示从 <commit-hash1> <commit-hash2> 的提交范围。
  • ^表示选择 <commit-hash1> 的父提交,因此是一个范围。
    举个例子,撤销从提交 a1b2c3d 到提交 d4e5f6g 的所有修改:
git revert -n a1b2c3d^..d4e5f6g

执行后,所有变更会暂时存放在暂存区,等待提交。

举个例子:

假设你有以下的提交历史:

* abc1234 (HEAD -> master) Merge feature-branch into master
* d7e6b2d (feature-branch) Add new feature
* 3a6c0f2 (master) Initial commit

其中,abc1234 是一个合并提交,feature-branch 被合并进了 master。现在,你想撤销这个合并提交,并希望保留 master 分支的变更,因此使用命令:

git revert -m 1 abc1234

这个命令会创建一个新的提交,撤销合并操作中的更改,实际上它将会 恢复到 abc1234 合并之前的状态,但历史记录仍会保留合并提交。新的提交将会与 abc1234 之后的提交一起继续保留在历史中。
为什么需要 -m 参数?
合并提交有多个父提交,Git 需要知道你希望保留哪个父提交的内容。-m 1表示选择第一个父提交作为保留的版本,通常是主分支的版本。如果你使用 -m ,那么 Git 将选择第二个父提交,通常是被合并进来的分支的版本。

使用交互式 git revert

当你想撤销多个提交时,有时会遇到冲突,Git 会提示你进行冲突解决。git revert 会一个一个地撤销指定的提交,并且如果有冲突,Git 会停止并让你解决冲突。解决冲突后,你可以继续操作。
解决冲突后运行:

git revert --continue

如果你决定取消当前的撤销操作,可以使用:

git revert --abort

撤销合并提交

有时,你可能会遇到需要撤销合并提交的场景。合并提交具有特殊的结构,因此在执行 git revert 时需要额外小心。假设你有一个合并提交 abc1234,可以使用以下命令来撤销它:

git revert -m 1 abc1234

-m 1: 指定了合并提交的“主父提交”(通常是主分支)。-m后面的数字表示选择哪个父提交作为保留版本。
通过 git revert -m,Git 会根据指定的父提交创建一个新的提交来撤销合并操作。

强制跳过某次提交的提交信息编辑

在某些场景下,你可能希望跳过git revert操作中的提交信息编辑过程。可以通过--no-edit选项来跳过:

git revert --no-edit f7e8b2c

这个命令会直接执行`git revert操作,但不会弹出编辑器让你修改提交信息,而是使用默认的信息。

实战示例:撤销错误提交

假设你正在一个开发分支feature/login上工作,发现最近的一个提交引入了一个错误。你需要撤销该错误提交,但又不想修改历史提交(即不使用 git reset)。这时,git revert就非常适合。

查看提交历史

首先,我们查看最近的提交历史,找到要撤销的提交。

git log --oneline

输出可能是这样的:

a1b2c3d Add login feature
d4e5f6g Fix UI bug
h7i8j9k Update documentation

假设提交 a1b2c3d 引入了一个错误,我们需要撤销它。

执行 git revert

接下来,使用 git revert 撤销该提交:

git revert a1b2c3d

Git 会自动生成一个新的提交,撤销 a1b2c3d 中的所有更改。

解决冲突

如果 Git 在应用反向更改时发生了冲突,Git 会提示你进行冲突解决。你需要打开冲突文件,手动解决冲突,然后执行:

git add <conflicted-file>
git revert --continue

完成提交

最终,提交就会成功创建,撤销操作也完成了。可以通过 git log 查看新的提交记录,确认撤销操作已经生效。

git log --oneline

输出可能是:

f7g8h9i Revert "Add login feature"
a1b2c3d Add login feature
d4e5f6g Fix UI bug
h7i8j9k Update documentation

着重讲一下git revert -m

git提交历史模拟

假设我们有以下的 Git 历史:

* abc1234 (HEAD -> master) Merge feat02-branch into master
* def5678 (feat02-branch) Add feature 2
* ghi2345 (feat01-branch) Add feature 1
* jkl3456 (master) Initial commit

在这个例子中:

  • abc1234 是合并提交,它将 feat02-branch 合并到 master。
  • def5678 是 feat02-branch 上的提交,它增加了 feat02-branch 的功能。
  • ghi2345 是 feat01-branch 上的提交,它增加了 feat01-branch 的功能。
  • jkl3456 是 master 上的初始提交。

合并提交 abc1234 是一个合并提交,它有两个父提交:

  1. jkl3456(master 分支的提交)
  2. def5678(feat02-branch 分支的提交)

git revert -m 1 abc1234

git revert -m 1 abc1234表示撤销合并提交 abc1234,并保留第一个父提交(master 分支的提交)。即,撤销 feat02-branch 的更改并保留 master 分支的更改。
执行这个命令后,Git 会生成一个新的提交,撤销合并 feat02-branch 到 master 的操作,而不影响 feat01-branch 和 master 之间的关系。
命令

git revert -m 1 abc1234

git revert -m 2 abc1234

git revert -m 2 abc1234 表示撤销合并提交 abc1234,并保留第二个父提交(feat02-branch 分支的提交)。即,撤销 master 上的更改并保留 feat02-branch 的更改。
执行这个命令后,Git 会生成一个新的提交,撤销 master 分支的更改,同时保留 feat02-branch 的更改。
命令

git revert -m 2 abc1234

git revert -m 3 abc1234

git revert -m 3是一个特殊情况,适用于三方合并,通常会有多个父提交。例如,如果合并提交涉及 feat01-branch、feat02-branch 和 master 三个分支,那么可以使用 -m 3 来指定第三个父提交。然而,在我们这个例子中,由于合并提交 abc1234 只涉及 master 和 feat02-branch 两个父提交,因此 -m 3 不适用。假设有三方合并的历史如下:

*   abcd1234 (HEAD -> master) Merge branch 'feat01-branch' and 'feat02-branch'
|\
| * 12345678 (feat01-branch) Commit in feat01-branch
* | 87654321 (feat02-branch) Commit in feat02-branch
|/
*   11223344 Initial commit in master

在这个示例中:

  • abcd1234 是合并提交,具有 3 个父提交:
    • 父提交 1:master(在 abcd1234 之前的提交)。
    • 父提交 2:feat01-branch(合并进来的一个分支)。
    • 父提交 3:feat02-branch(合并进来的另一个分支)。

git revert -m 3 abcd1234使用-m 3时,Git 会选择第三个父提交作为基准(在这个例子中是 feat02-branch),并撤销合并提交中的更改。也就是说,撤销的合并提交会回滚 master 和 feat01-branch 的更改,但保留 feat02-branch 上的内容。

git revert -m 3 abcd1234

效果:Git 会撤销 abcd1234 的合并,回滚 master 和 feat01-branch 上的修改。结果是保留了 feat02-branch 上的修改,并回滚了 master 和 feat01-branch 的修改。

-m 总结

  • git revert -m 1 <commit>:撤销合并提交,保留第一个父提交的变更。
  • git revert -m 2 <commit>:撤销合并提交,保留第二个父提交的变更。
  • git revert -m 3 <commit>:撤销合并提交,保留第三个父提交的变更(适用于三方合并)。

git revert 与 git reset 的比较

git revert vs git reset

git revert

  • 用于撤销已经提交的内容。
  • 保持历史提交的完整性,不会改变提交记录。
  • 适用于公共分支,避免影响其他开发人员的工作。

git reset

  • 用于重置当前分支的指针,可以回退到某个历史提交。
  • 会改变提交历史,可能导致丢失更改。
  • 适用于个人分支或本地仓库的操作。

哪个更适合团队合作?

在团队协作中,通常建议使用git revert,因为它不会重写历史,而是创建一个新的提交,撤销先前的更改。这样可以保证团队成员之间的协作历史不受干扰。

注意事项

  1. 小心使用git revertgit revert会创建新的提交,因此如果你频繁地进行撤销操作,可能会导致提交历史变得冗长。在撤销多个提交时,可以考虑将多个撤销操作合并到一次提交中,以保持清晰的历史记录。
  2. 处理冲突:当你撤销提交时,可能会遇到文件冲突。务必认真解决冲突,以确保撤销操作正确执行。
  3. 避免在已经发布的分支中使用 git resetgit reset会重写历史,这会给协作带来麻烦,而git revert保持了历史的连贯性,因此在公共分支中,推荐使用git revert

总结

  git revert是 Git 中撤销历史提交的强大工具,能够通过创建新的提交来撤销指定的更改,保持项目历史的完整性,避免重写历史,适用于团队合作中的常见场景。通过理解和掌握git revert,开发人员可以更加灵活和安全地管理代码历史,并在出现错误时轻松回退。

相关文章:

Git | git revert命令详解

关注&#xff1a;CodingTechWork 引言 Git 是一个强大的版本控制工具&#xff0c;广泛应用于现代软件开发中。它为开发人员提供了多种功能来管理代码、协作开发和版本控制。在 Git 中&#xff0c;有时我们需要撤销或回退某些提交&#xff0c;而git revert 是一个非常有用的命令…...

ASP.NET Core 中,Cookie 认证在集群环境下的应用

在 ASP.NET Core 中&#xff0c;Cookie 认证在集群环境下的应用通常会遇到一些挑战。主要的问题是 Cookie 存储在客户端的浏览器中&#xff0c;而认证信息&#xff08;比如 Session 或身份令牌&#xff09;通常是保存在 Cookie 中&#xff0c;多个应用实例需要共享这些 Cookie …...

Flyte工作流平台调研(五)——扩展集成

系列文章&#xff1a; Flyte工作流平台调研&#xff08;一&#xff09;——整体架构 Flyte工作流平台调研&#xff08;二&#xff09;——核心概念说明 Flyte工作流平台调研&#xff08;三&#xff09;——核心组件原理 Flyte工作流平台调研&#xff08;四&#xff09;——…...

【AUTOSAR 基础软件】软件组件的建立与使用(“代理”SWC)

基础软件往往需要建立一些“代理”SWC来完成一些驱动的抽象工作&#xff08;Complex_Device_Driver_Sw或者Ecu_Abstraction_Sw等&#xff09;&#xff0c;或建立Application Sw Component来补齐基础软件需要提供的功能实现。当面对具体的项目时&#xff0c;基础软件开发人员还可…...

java通过ocr实现识别pdf中的文字

需求&#xff1a;识别pdf文件中的中文 根据github项目mymonstercat 改造,先将pdf文件转为png文件存于临时文件夹&#xff0c;然后通过RapidOcr转为文字,最后删除临时文件夹 1、引入依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId&g…...

Git 命令代码管理详解

一、Git 初相识&#xff1a;版本控制的神器 在当今的软件开发领域&#xff0c;版本控制如同基石般重要&#xff0c;而 Git 无疑是其中最耀眼的明珠。它由 Linus Torvalds 在 2005 年创造&#xff0c;最初是为了更好地管理 Linux 内核源代码。随着时间的推移&#xff0c;Git 凭借…...

Docker的安装和使用

容器技术 容器与虚拟机的区别 虚拟机 (VM) VM包含完整的操作系统&#xff0c;并在虚拟化层之上运行多个操作系统实例。 VM需要更多的系统资源&#xff08;CPU、内存、存储&#xff09;来管理这些操作系统实例。 容器 (Container) 容器共享主机操作系统的内核&#xff0c;具…...

Flink系统知识讲解之:Flink内存管理详解

Flink系统知识讲解之&#xff1a;Flink内存管理详解 在现阶段&#xff0c;大部分开源的大数据计算引擎都是用Java或者是基于JVM的编程语言实现的&#xff0c;如Apache Hadoop、Apache Spark、Apache Drill、Apache Flink等。Java语言的好处是不用考虑底层&#xff0c;降低了程…...

使用JMeter模拟多IP发送请求!

你是否曾遇到过这样的场景&#xff1a;使用 JMeter 进行压力测试时&#xff0c;单一 IP 被服务器限流或者屏蔽&#xff1f;这时&#xff0c;如何让 JMeter 模拟多个 IP 发送请求&#xff0c;成功突破测试限制&#xff0c;成为测试工程师必须攻克的难题。今天&#xff0c;我们就…...

【Ubuntu与Linux操作系统:六、软件包管理】

第6章 软件包管理 6.1 Linux软件安装基础 Linux的软件包是以二进制或源码形式发布的程序集合&#xff0c;包含程序文件和元数据。软件包管理器是Linux系统的重要工具&#xff0c;用于安装、更新和卸载软件。 1. 常见的软件包管理器&#xff1a; DEB 系统&#xff08;如Ubunt…...

【数据结构-堆】力扣1834. 单线程 CPU

给你一个二维数组 tasks &#xff0c;用于表示 n​​​​​​ 项从 0 到 n - 1 编号的任务。其中 tasks[i] [enqueueTimei, processingTimei] 意味着第 i​​​​​​​​​​ 项任务将会于 enqueueTimei 时进入任务队列&#xff0c;需要 processingTimei 的时长完成执行。 现…...

【前端动效】原生js实现拖拽排课效果

目录 1. 效果展示 2. 效果分析 2.1 关键点 2.2 实现方法 3. 代码实现 3.1 html部分 3.2 css部分 3.3 js部分 3.4 完整代码 4. 总结 1. 效果展示 如图所示&#xff0c;页面左侧有一个包含不同课程&#xff08;如语文、数学等&#xff09;的列表&#xff0c;页面右侧…...

C#使用OpenTK绘制3D可拖动旋转图形三棱锥

接上篇,绘制着色矩形 C#使用OpenTK绘制一个着色矩形-CSDN博客 上一篇安装OpenTK.GLControl后,这里可以直接拖动控件GLControl 我们会发现GLControl继承于UserControl //// 摘要:// OpenGL-aware WinForms control. The WinForms designer will always call the default//…...

排序的本质、数据类型及算法选择

排序的本质、数据类型及算法选择 一、排序的本质二、排序的数据类型三、排序算法的选择依据 前两天老金写了篇 “十大排序简介”&#xff0c;有点意犹未尽&#xff0c;这一回老金想把排序连根拔起&#xff0c;从排序的本质说道说道。 一、排序的本质 从字面上理解&#xff0c…...

Python的列表基础知识点(超详细流程)

目录 一、环境搭建 二、列表 2.1 详情 2.2 列表定义 2.3 列表长度 2.4 列表索引 2.5 切片索引 2.6 添加 2.7 插入 2.8 剔除 2.8.1 pop方法 2.8.2 del方法 2.9 任何数据类型 2.10 拼接 2.10.1 “” 2.10.2 “*” 2.11 逆序 ​编辑 2.12 计算出现次数 2.13 排序…...

HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现

HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现 最近在学习鸿蒙开发过程中&#xff0c;阅读了官方文档&#xff0c;在之前做flutter时候&#xff0c;经常使用overlay&#xff0c;使用OverlayEntry加入到overlayState来做添加悬浮按钮、提示弹窗、加载中指示器、加载失败的t…...

【Ubuntu与Linux操作系统:一、Ubuntu安装与基本使用】

第1章 Ubuntu安装与基本使用 1.1 Linux与Ubuntu Linux是一种开源、类Unix操作系统内核&#xff0c;拥有高稳定性和强大的网络功能。由于其开源性和灵活性&#xff0c;Linux被广泛应用于服务器、嵌入式设备以及桌面环境中。 Ubuntu是基于Debian的一个流行Linux发行版&#xf…...

React 元素渲染

React 元素渲染 React 是一个用于构建用户界面的 JavaScript 库&#xff0c;它允许开发人员创建大型应用程序&#xff0c;这些应用程序可以随着时间的推移而高效地更新和渲染。React 的核心概念之一是元素渲染&#xff0c;它描述了如何将 JavaScript 对象转换为 DOM&#xff0…...

【2024年华为OD机试】 (C卷,100分)- 括号匹配(Java JS PythonC/C++)

一、问题描述 题目描述 给定一个字符串&#xff0c;里边可能包含“()”、“[]”、“{}”三种括号&#xff0c;请编写程序检查该字符串中的括号是否成对出现&#xff0c;且嵌套关系正确。 若括号成对出现且嵌套关系正确&#xff0c;或该字符串中无括号字符&#xff0c;输出&am…...

解锁企业数字化转型新力量:OpenCoze(开源扣子)

在当今数字化浪潮席卷之下&#xff0c;企业对于高效管理和协同运作的需求愈发迫切&#xff0c;而开源技术正逐渐成为众多企业破局的关键利器。今天&#xff0c;想给大家介绍一款极具潜力的开源项目 ——OpenCoze&#xff0c;中文名称 “开源扣子”。 一、OpenCoze 是什么&…...

【网络云SRE运维开发】2025第2周-每日【2025/01/12】小测-【第12章 rip路由协议】理论和实操考试题解析

文章目录 选择题答案及解析理论题答案及解析实操题答案及解析下一步进阶 选择题答案及解析 RIP路由协议是基于哪种算法的动态路由协议&#xff1f; 答案&#xff1a;B. 距离矢量算法解析&#xff1a;链路状态算法用于OSPF等协议&#xff1b;最小生成树算法主要用于生成树协议&…...

【微服务】8、分布式事务 ( XA 和 AT )

文章目录 利用Seata解决分布式事务问题&#xff08;XA模式&#xff09;AT模式1. AT模式原理引入2. AT模式执行流程与XA模式对比3. AT模式性能优势及潜在问题4. AT模式数据一致性解决方案5. AT模式一阶段操作总结6. AT模式二阶段操作分析7. AT模式整体特点8. AT模式与XA模式对比…...

CVE-2025-22777 (CVSS 9.8):WordPress | GiveWP 插件的严重漏洞

漏洞描述 GiveWP 插件中发现了一个严重漏洞&#xff0c;该插件是 WordPress 最广泛使用的在线捐赠和筹款工具之一。该漏洞的编号为 CVE-2025-22777&#xff0c;CVSS 评分为 9.8&#xff0c;表明其严重性。 GiveWP 插件拥有超过 100,000 个活跃安装&#xff0c;为全球无数捐赠平…...

TypeScript Jest 单元测试 搭建

NPM TypeScript 项目搭建 创建目录 mkdir mockprojectcd mockproject初始化NPM项目 npm init -y安装TypeScript npm i -D typescript使用VSCode 打开项目 创建TS配置文件tsconfig.json {"compilerOptions": {"target": "es5","module&…...

基于 SSH 的任务调度系统

文末附有完整项目代码 在当今科技飞速发展的时代&#xff0c;任务调度系统的重要性日益凸显。本文将详细介绍一个基于 SSH&#xff08;SpringStruts2Hibernate&#xff09;的任务调度系统的设计与实现。 一、系统概述 本系统旨在改变传统人工任务调度方式&#xff0c;通过计算…...

filestream安装使用全套+filebeat的模块用法

1 filestream介绍 官方宣布&#xff1a;输入类型为log在filebeat7.16版本已经弃用了 Filestream 是 Filebeat 中的一种 输入类型&#xff08;Input&#xff09;&#xff0c;用于处理日志文件的读取。它是为了取代 Filebeat 中传统的 log 输入&#xff08;Input&#xff09;设…...

java项目之房屋租赁系统源码(springboot+mysql+vue)

项目简介 房屋租赁系统实现了以下功能&#xff1a; 房屋租赁系统的主要使用者分为&#xff1a; 系统管理&#xff1a;个人中心、房屋信息管理、预约看房管理、合同信息管理、房屋报修管理、维修处理管理、房屋评价管理等模块的查看及相应操作&#xff1b; 房屋信息管理&#…...

sap mm学习笔记

1. 业务流程 2. 组织架构 3. 物料主数据 4.采购主数据 5. 采购管理 6. 库存管理 7.物料主数据 8. 采购申请 ME51N...

代码随想录_链表

代码随想录02 链表 203.移除链表元素 力扣题目链接(opens new window) 题意&#xff1a;删除链表中等于给定值 val 的所有节点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 示例 2&#xff1a; 输入&#xff1a;he…...

EF Code 并发控制

【悲观控制】 不推荐用&#xff0c;EF Core 没有封装悲观并发控制的使用&#xff0c;需要使用原生Sql来使用悲观并发控制 一般使用行锁、表锁等排他锁对资源进行锁定&#xff0c;同时只有一个使用者操作被锁定的资源 拿sql server举例&#xff0c;可以使用表所、或者行所解决…...

遇到灾难网站变灰怎么做/网站seo优化服务

说明&#xff1a;本文原创作者『strongerHuang』首发于微信公众号『嵌入式专栏』&#xff0c;同时也更新在我的个人网站&#xff1a;EmbeddedDevelop标签&#xff1a;CAN、 CANOpen、 CanFestival一、写在前面教程前面文章讲述了《对象字典生成工具环境搭建》&#xff0c;因为对…...

政府网站建设工作经验交流/浏览器如何推广自己网站

当然我们也看家了这两位超人以及饰演者的帅气形象&#xff0c;而再细心看看下图我们会发现&#xff0c;除了手拿硕大的变身器另外一只手中还拿着一个圆形的东西&#xff0c;拾部君觉得是不是要把这个圆形的东西塞到变身器的孔里然后大叫“变身”才能变身&#xff1f;果然有点《…...

做自适应网站对设计稿的要求/推广普通话活动方案

一、有限状态机 有限状态机是一个特殊的有向图&#xff0c;包含节点和连接这些节点的弧。每个有限状态机都有开始、结束和若干个中间状态&#xff0c;每个弧上带有从一个状态进入下一个状态的条件。 以一个简化的购物流程为例&#xff0c;开始和结束之间有待下单、待支付、待发…...

如何给自己做网站/关键词排名优化如何

java里初始化一个类的对象&#xff0c;通过初始化快或者构造方法进行数据赋值。与其相关的执行代码有这么几种&#xff1a; 静态初始化块初始化块构造方法静态初始化块 静态初始化块只在类加载时执行一次&#xff0c;同时静态初始化块只能给静态变量赋值&#xff0c;不能初始化…...

一级做a视频在线观看网站/宁波网站seo公司

第一个QNX程序已经写完&#xff0c;测试了QNX应用的开发过程&#xff0c;开始写一些复杂一点点的程序。 最先想到的是获取键盘输入和通过控制台进行输出&#xff0c;这些都是当初学习C语言的时候必做的功课。 <wbr></wbr> 和标准的C语言一样&#xff0c;QNX C语…...

wordpress添加3d地图/网站排名seo

作为一名前端工程师&#xff0c;一个好的编辑器可以在编码期间&#xff0c;事半功倍。这里我分享一下vs code和atom这两种现今非常流行的编辑器&#xff0c;各有各的优缺点&#xff0c;看大家的喜好。我比较倾向于vs code&#xff0c;顺便也把插件整理了一下&#xff0c;给大家…...