gOdm@'s BLOG

git常用命令

版权信息

warning

本文章为博主原创文章。遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。


1. 初次使用git

1.1. 必需配置+如何修改配置信息

请配置好 user 和 email。

git config --global user.name "your name"
git config --global user.email "you email"
# 设置默认分支名为main而不是master
git config --global init.defaultBranch main

使用 --global 选项以修改全局配置文件。如若省略 --global,则修改仓库配置文件。

配置文件应用优先级: 仓库 > 全局 > 系统。

1.2. 查看git的配置信息

# 查看所有配置信息
git config --list

# 查看系统级配置信息
git config --system --list

# 查看用户级/全局配置信息
git config --global --list

# 查看仓库级配置信息
git config --local --list

# e.g. 如果想要查看指定配置项
git config user.name

2. 开始在项目中使用版本管理

git init

3. 将更改提交到暂存区

3.1. 提交

将所有更改提交到暂存区,也可指定单个文件:

git add .

3.2. 撤回提交

如果想要撤回提交到暂存区的更改(更改保留,只是从暂存区撤回):

# 移除单个文件
git restore --staged <文件名>

# 移除特定文件夹下的所有文件
git restore --staged <文件夹名>/

# 移除暂存区里的所有文件(一键清空暂存区)
git restore --staged .

--staged 确保仅仅把文件从暂存区里撤出来,而不会修改工作区里写好的代码。

使用 git restore 一定要加 --staged,除非完全理解后果。

3.3. 在提交时永久排除一些文件/文件夹

  1. 在项目根目录下创建 .gitignore 文本文件

  2. 编辑它,e.g.:

    # 忽略所有的 .log 结尾的文件
    *.log
    
    # 忽略整个 node_modules 文件夹(注意末尾的斜杠)
    node_modules/
    
    # 忽略 build 目录下的所有文件,但不包括 build/readme.txt
    build/
    !build/readme.txt
    
    # 仅忽略根目录下的 config.ini 文件,但不影响子目录中的同名文件
    /config.ini

如果你在配置 .gitignore 之前,某些文件已经通过 git add 提交到了 Git 版本库中,那么仅仅修改 .gitignore 是无效的。

要使 .gitignore 重新生效,你需要先将这些文件从 Git 的“追踪缓存”中移除:

# 移除单个已追踪的文件(保留本地物理文件)
git rm --cached <文件路径>

# 移除整个已追踪的文件夹(保留本地物理文件夹)
git rm -r --cached <文件夹路径>

git add .gitignore

# 然后提交这次清理操作
git commit -m "chore: 停止追踪指定文件并更新 .gitignore"

--cached 确保该文件仅仅是从 Git 的版本控制系统中被移除,而不会从你的电脑硬盘上被物理删除。

4. 正式提交更改

4.1. 提交更改

git commit -m ”提交描述“

在提交时,请规范提交描述。

4.2. 提交描述规范

采用约定式提交 (Conventional Commits)

  1. 提交结构

    提交结构包含三个部分:HeaderBodyFooter

    <type>(<scope>): <subject>
    // 空一行
    <body>
    // 空一行
    <footer>
  2. Header 规范(必填)

    scope 用于说明本次提交影响的模块或文件范围,建议使用英文。

    • 示例: kernelsensorguii2cbuild

    • 如果是跨模块的全局修改,可以省略或写 *

    subject(必填)用于对本次提交的简短描述,建议使用英文,要求:

    • 动词开头:建议使用一般现在时(例如用 implement 而不是 implemented,用 add 而不是 added)。

    • 不加标点:结尾不需要加句号(.)。

    • 言简意赅:控制在 50 个字符以内。

类型标识 含义 场景示例
feat 新增功能 (Feature) 新增一个硬件驱动、实现一个新的调度算法
fix 修复 Bug 修复内存泄漏、修复中断响应延迟问题
refactor 代码重构 剥离传感器解析逻辑(不涉及新增功能或修复bug)
docs 文档更新 更新 README、修改代码注释
style 代码格式 调整缩进、空格、格式化(不影响代码运行的逻辑)
perf 性能优化 优化上下文切换效率、降低 CPU 占用
test 测试相关 增加或更新单元测试
chore 构建或工具变动/杂项 修改 CMakeLists.txt、更新依赖库或打包脚本
  1. Body 与 Footer 规范(选填)

    • Body(详细描述): 补充说明本次修改的动机、具体的底层实现逻辑,以及与修改前行为的对比。适合逻辑复杂的底层系统开发。

    • Footer(页脚): 主要用于两种情况:

      1. 不兼容变动 (BREAKING CHANGE): 如果当前代码与上一版本不兼容(例如修改了核心 API 接口),必须在 Footer 处标明,并说明迁移方法。

      2. 关闭 Issue: 例如 Closes #123, Closes #124

  2. 一些示例

    示例1:新增核心功能

    feat(scheduler): implement PendSV context switching mechanism

    示例2:基于设计原则的代码重构(包含 Body)

    refactor(sensor): decouple SCD41 and SHT30 logic from main loop
    
    Apply Dependency Inversion Principle to separate hardware-
    specific reading logic from the central data hub. This makes 
    adding new I2C sensors in the future plug-and-play.

    示例3:构建工具调整

    chore(build): update CMake to output all binaries to bin directory

    示例4:破坏性更新 (Breaking Change)

    feat(api): redesign the sensor module registration interface
    
    BREAKING CHANGE: The `register_sensor()` function now requires
    a priority argument. Existing device drivers must be updated 
    to pass the new parameter.

4.3. 管理已提交的更改

使用 rebase 命令管理已提交的更改。

git rebase -i HEAD~n`

n 是你想回顾的最近几次提交数,它会打开一个类似文本编辑器的界面。like this:

pick 111111 fiix: 拼写错误的提交说明 
pick 222222 fix: 修复了中断问题 
pick 333333 feat: 最新的功能

# Rebase ... (下面是一大堆注释说明)

注意,这里的顺序和 git log相反的。最上面的是最旧的提交,最下面的是最新的。

找到你想修改的记录,更改开头的指令,常用的指令:

这是一个重写提交描述的例子:

  1. 编辑指令
reword 111111 fiix: 拼写错误的提交说明 
reword 222222 fix: 修复了中断问题 
pick 333333 feat: 最新的功能

# Rebase ... (下面是一大堆注释说明)
  1. 编辑好后,保存并退出当前编辑器

  2. 上一个编辑器关掉,Git 会立刻为你打开第二个编辑界面。这个界面是你要修改的那个提交的提交描述。

  3. 修改提交描述完成后,保存并退出当前编辑器

  4. Git 会为你打开下一个你想要修改的提交的提交描述编辑界面

  5. 重复步骤4,直到你想修改的所有提交记录全部修改完成

这是一个合并提交的例子:

  1. 编辑指令

    pick 111111 fiix: 拼写错误的提交说明 
    squash 222222 fix: 修复了中断问题 
    squash 333333 feat: 最新的功能
    
    # Rebase ... (下面是一大堆注释说明)
  2. 编辑好后,保存并退出当前编辑器

(如果有冲突,处理冲突)

  1. 上一个编辑器关掉,Git 会立刻为你打开第二个编辑界面。这个界面要求你为合并提交写一个新的提交描述

(此时如果意识到自己合并错了,想要放弃合并,新开一个终端,运行 git rebase --abort 命令)

  1. 编辑好后,保存并退出当前编辑器

  2. 最终结果:提交记录 222222333333 消失,所有修改都并入了 111111

(如果想要撤回已合并的提交,请使用 git reflog + git reset --hard HEAD@{n}git reset --hard <hash>

5. 分支的管理

5.1. 切换分支

git checkout <分支名>

5.2. 重命名当前分支

git branch -m <name>

6. 版本管理

6.1. 查看历史版本

git log --oneline 

6.2. 回退版本

  1. 回退,同时删除提交记录

    git reset --soft HEAD^    #回退到上一个版本
    git reset --mixed HEAD~n  #回退到前n个版本
    git reset --hard  <hash>  #使用hash值指定版本 
    • --soft:回退掉的那些版本的修改全部都会保留在“暂存区”(Staging Area)中。你可以重新修改并再次 commit。
    • --mixed:修改会保留在“工作区”(Working Directory)中,表现为未暂存的文件。
    • --hard非必要不要使用! 将项目完全恢复到某个版本提交时的状态,之后所有的更改全部丢弃,且无法找回。执行前请务必确认并理解后果。建议执行前先使用git stash

禁止在多人协作中使用 git reset 回退版本!除非完全理解后果

  1. 重新提交一个记录,用于撤销某版本的更改

    git revert <hash>
    
    
    A->B->C->D->E->(F)HEAD
    
    想回退到C版本,即撤销D版本的修改。
    
    git revert D
    
    A->B->C->D->E->F->(D')HEAD
    
    D'撤销了D所做的所有更改
    
    因为是直接撤销D的改动,如果E、F版本依赖或覆盖了D的代码,则需要解决来自E、F的版本冲突,才能成功提交 D‘
    

共计约2.4k字。于2026/05/28首次发布,最后更新于2026/05/30。

本文章为博主原创文章。遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

  1. 1. 初次使用git
    1. 1.1. 必需配置+如何修改配置信息
    2. 1.2. 查看git的配置信息
  2. 2. 开始在项目中使用版本管理
  3. 3. 将更改提交到暂存区
    1. 3.1. 提交
    2. 3.2. 撤回提交
    3. 3.3. 在提交时永久排除一些文件/文件夹
  4. 4. 正式提交更改
    1. 4.1. 提交更改
    2. 4.2. 提交描述规范
    3. 4.3. 管理已提交的更改
  5. 5. 分支的管理
    1. 5.1. 切换分支
    2. 5.2. 重命名当前分支
  6. 6. 版本管理
    1. 6.1. 查看历史版本
    2. 6.2. 回退版本