Git相关

本文介绍Git相关知识,如提交规范、相关命令等
可参考:https://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html


项目中遇到的问题

git add . 后如何撤销暂存


# 撤销所有文件暂存
git reset HEAD .
git reset HEAD *
# 撤销单个文件暂存
git reset HEAD <文件名>

代码合并错了,切换到很久以前的状态


 git reset --hard 90b61e24e83795e7ee30f8f0e279d2083f704db3   // 后面这里是提交的分支的代码


项目开发流程

# 1. 切换到workspace,克隆项目
git clone <仓库地址>

# 2. 进入项目目录
cd 项目目录

# 3. 修改代码(在 IntelliJ 中完成)

# 4. 检查状态
git status

# 5. 添加修改到暂存区
git add .

# 6. 提交更改
git commit -m "提交信息"

# 7. 拉取最新代码(可选但推荐)
git pull origin main

# 8. 合并分支(如有需要)
git merge feature-branch
# 解决冲突后:
git add <冲突文件>
git commit

# 9. 推送到远程仓库
git push origin main

Git提交规范

Git 提交规范(如 featfixchorestyle 等)是一种约定俗成的提交信息格式,旨在通过标准化的提交信息提高代码仓库的可维护性和协作效率。最常见的规范是 Conventional Commits,它通过统一的提交信息结构帮助团队自动化生成变更日志、管理版本号以及跟踪代码变化。

为什么需要提交规范?

  1. 自动化工具支持
    • 工具(如 commitlintsemantic-release)可基于提交信息自动生成 CHANGELOG,并按语义化版本(SemVer)自动发布版本。
  2. 代码可追溯性
    • 通过类型和范围快速定位代码变更,例如 git log --grep="feat" 查看所有新功能提交。
  3. 团队协作效率
    • 统一的提交信息格式让团队成员快速理解提交意图,减少沟通成本。

遵循提交规范能显著提升代码仓库的可维护性。常见类型包括:

  • 功能新增feat
  • 问题修复fix
  • 代码重构refactor
  • 文档更新docs
  • 测试相关test
  • 工具维护chorebuildci

Conventional Commits 核心规则

提交信息通常遵循以下格式:

<类型>(<范围>): <简短描述>
[空行]
<详细说明>(可选)
[空行]
<脚注>(如 BREAKING CHANGE 或关闭的 issue)(可选)
  • 类型:必须,用于描述提交的类别(如 feat、fix 等)。
  • 范围:可选,用于描述代码修改的模块或功能(如 storecomponents/header)。
  • 描述:必须,简短说明提交内容。
  • 详细说明:可选,进一步解释提交的细节。
  • 脚注:可选,如重大变更(BREAKING CHANGE)或关联的 issue 编号。

常见类型(Types)详解

1. feat(新功能)

  • 定义:添加新功能或特性。
  • 适用场景:任何新增功能或接口。
  • 示例
    feat(user): 添加用户登录功能
    feat(auth): 新增 JWT 认证接口
    

2. fix(修复)

  • 定义:修复已知的 Bug 或缺陷。
  • 适用场景:修正代码中的错误或逻辑问题。
  • 示例
    fix(login): 修复密码验证时的空指针异常
    fix(api): 修正分页请求的参数错误
    

3. chore(维护)

  • 定义:构建流程、工具配置或代码库维护的修改。
  • 适用场景:修改构建脚本、依赖版本、CI/CD 配置等。
  • 示例
    chore(deps): 升级所有依赖到最新版本
    chore(ci): 配置 GitHub Actions 流水线
    

4. style(格式)

  • 定义:代码格式、缩进、代码风格的调整(不影响逻辑)。
  • 适用场景:修复代码规范、调整缩进、删除空格等。
  • 示例
    style(components): 使用 Prettier 格式化组件代码
    style(index.js): 调整代码缩进为 2 个空格
    

5. docs(文档)

  • 定义:文档的修改或新增(如注释、README 文件)。
  • 适用场景:更新说明、修复文档错误。
  • 示例
    docs: 补充 API 接口文档
    docs(utils): 修正工具函数的注释说明
    

6. test(测试)

  • 定义:测试相关的代码修改(如单元测试、集成测试)。
  • 适用场景:添加、修改或删除测试用例。
  • 示例
    test(auth): 新增用户权限验证单元测试
    test: 修复所有单元测试的环境配置
    

7. refactor(重构)

  • 定义:代码结构的优化或重构(不改变外部行为)。
  • 适用场景:简化代码、提取公共函数、优化代码结构。
  • 示例
    refactor(utils): 将重复逻辑封装为独立函数
    refactor(store): 重构状态管理模块
    

8. perf(性能)

  • 定义:优化代码性能或资源消耗。
  • 适用场景:提升执行速度、减少内存占用等。
  • 示例
    perf(render): 优化列表渲染性能
    perf(database): 使用缓存减少数据库查询次数
    

9. build(构建)

  • 定义:构建系统或工具的配置修改。
  • 适用场景:修改打包配置、依赖管理、部署脚本等。
  • 示例
    build: 配置 Webpack 5 优化构建速度
    build: 添加 TypeScript 编译配置
    

10. ci(持续集成)

  • 定义:持续集成流程的修改(如 GitHub Actions、Jenkins)。
  • 适用场景:配置或修复 CI/CD 流水线。
  • 示例
    ci: 修复 GitHub Actions 的环境变量配置
    ci: 添加代码覆盖率检查步骤
    

其他注意事项

  1. BREAKING CHANGE(重大变更):

    • 当提交破坏现有功能或接口时,需在描述后注明 BREAKING CHANGE,并说明变更内容。
    • 示例:
      feat(api): 新增用户角色字段(需要前端适配)
      BREAKING CHANGE: 用户接口返回结构已调整,需更新客户端代码
      
  2. 关联 issue

    • 可以在提交信息中关联 GitHub/GitLab 的 issue,例如:
      fix: 修复导航栏点击失效问题
      closes #123
      
  3. 类型选择原则

    • 如果提交同时涉及多个类型(如重构和修复),优先选择最核心的类型,或拆分为多个提交。

Git相关命令


1. 基础命令

安装 Git

# Ubuntu/Debian
sudo apt-get install git

# macOS (通过 Homebrew)
brew install git

初始化仓库

git init           # 初始化本地仓库
git clone <url>    # 克隆远程仓库(例如:git clone https://github.com/user/repo.git)

配置信息

git config --global user.name "Your Name"    # 设置用户名
git config --global user.email "your@email.com"  # 设置邮箱

2. 文件管理

查看状态

git status         # 查看当前仓库状态(未跟踪、修改、暂存等文件)

添加文件到暂存区

git add <file>         # 添加单个文件(例如:git add index.html)
git add .              # 添加所有修改和新文件
git add -p             # 交互式选择添加部分内容

提交更改

git commit -m "commit message"  # 提交暂存区的更改(例如:git commit -m "Fix bug in login page")
git commit --amend          # 修改最后一次提交(合并新更改到上次提交)

忽略文件

创建 .gitignore 文件并添加需要忽略的文件模式:

# .gitignore 示例
*.log
temp/
node_modules/

3. 提交历史

查看提交记录

git log            # 查看完整提交历史
git log --oneline  # 简洁的提交历史(一行一个提交)
git log --graph    # 可视化分支合并历史

查看差异

git diff           # 查看工作区与暂存区的差异
git diff --staged  # 查看暂存区与最后一次提交的差异
git show <commit>  # 查看特定提交的详细信息(例如:git show abc123)

撤销更改

git restore <file>         # 丢弃工作区的修改(等同于 git checkout -- <file>)
git restore --staged <file>  # 从暂存区移除文件,但保留工作区修改
git reset HEAD~1           # 撤销最后一次提交,保留工作区和暂存区的更改
git reset --hard <commit>  # 重置到指定提交(强制丢弃后续所有更改)

4. 分支管理

分支操作

git branch          # 列出本地分支
git branch <name>   # 创建新分支(例如:git branch feature-1)
git checkout <name> # 切换分支(例如:git checkout feature-1)
git checkout -b <name>  # 创建并切换到新分支

合并分支

git merge <branch>  # 将指定分支合并到当前分支(例如:git merge feature-1)
git merge --abort   # 中止未完成的合并

删除分支

git branch -d <branch>  # 删除分支(确保已合并)
git branch -D <branch>  # 强制删除未合并的分支

5. 远程仓库

查看远程仓库

git remote -v          # 查看远程仓库地址
git remote add <name> <url>  # 添加远程仓库(例如:git remote add origin https://github.com/user/repo.git)

推送与拉取

git push <remote> <branch>  # 推送分支到远程(例如:git push origin main)
git pull                   # 拉取远程最新更改并合并到当前分支
git fetch                  # 获取远程更改但不合并

重命名或删除远程分支

git push origin --delete <branch>  # 删除远程分支
git branch -m <old-name> <new-name>  # 重命名本地分支
git push origin <new-name>:<old-name>  # 同步到远程

6. 高级操作

重置与回退

git reset HEAD~1       # 回退到前一个提交(保留工作区更改)
git reset --soft HEAD~1  # 回退提交但保留暂存区更改
git reset --hard abc123  # 直接回退到指定提交(强制)

分支的 cherry-pick

git cherry-pick <commit>  # 将某个提交应用到当前分支(例如:git cherry-pick abc123)

标签管理

git tag <name>        # 创建标签(例如:git tag v1.0)
git tag -a <name> -m "message"  # 带注释的标签
git push origin <tag-name>  # 推送标签到远程

补丁操作

git format-patch HEAD~1  # 生成补丁文件(用于分享特定提交)
git apply <patch-file>   # 应用补丁文件

暂存工作区(Stash)

git stash           # 暂存当前未提交的更改
git stash list      # 查看暂存列表
git stash apply     # 恢复最近的暂存
git stash drop      # 删除最近的暂存

7. 其他实用命令

查看忽略的文件

git check-ignore <file>  # 检查文件是否被忽略

查看文件的提交历史

git log -- <file>  # 查看特定文件的提交历史

显示远程仓库信息

git remote show origin  # 查看远程仓库详细信息

清理未引用的对象

git gc               # 垃圾回收,清理旧对象
posted @ 2025-07-07 10:41  cwp0  阅读(8)  评论(0)    收藏  举报