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 提交规范(如 feat、fix、chore、style 等)是一种约定俗成的提交信息格式,旨在通过标准化的提交信息提高代码仓库的可维护性和协作效率。最常见的规范是 Conventional Commits,它通过统一的提交信息结构帮助团队自动化生成变更日志、管理版本号以及跟踪代码变化。
为什么需要提交规范?
- 自动化工具支持:
- 工具(如
commitlint、semantic-release)可基于提交信息自动生成 CHANGELOG,并按语义化版本(SemVer)自动发布版本。- 代码可追溯性:
- 通过类型和范围快速定位代码变更,例如
git log --grep="feat"查看所有新功能提交。- 团队协作效率:
- 统一的提交信息格式让团队成员快速理解提交意图,减少沟通成本。
遵循提交规范能显著提升代码仓库的可维护性。常见类型包括:
- 功能新增:
feat- 问题修复:
fix- 代码重构:
refactor- 文档更新:
docs- 测试相关:
test- 工具维护:
chore、build、ci
Conventional Commits 核心规则
提交信息通常遵循以下格式:
<类型>(<范围>): <简短描述>
[空行]
<详细说明>(可选)
[空行]
<脚注>(如 BREAKING CHANGE 或关闭的 issue)(可选)
- 类型:必须,用于描述提交的类别(如 feat、fix 等)。
- 范围:可选,用于描述代码修改的模块或功能(如
store、components/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: 添加代码覆盖率检查步骤
其他注意事项
-
BREAKING CHANGE(重大变更):
- 当提交破坏现有功能或接口时,需在描述后注明
BREAKING CHANGE,并说明变更内容。 - 示例:
feat(api): 新增用户角色字段(需要前端适配) BREAKING CHANGE: 用户接口返回结构已调整,需更新客户端代码
- 当提交破坏现有功能或接口时,需在描述后注明
-
关联 issue:
- 可以在提交信息中关联 GitHub/GitLab 的 issue,例如:
fix: 修复导航栏点击失效问题 closes #123
- 可以在提交信息中关联 GitHub/GitLab 的 issue,例如:
-
类型选择原则:
- 如果提交同时涉及多个类型(如重构和修复),优先选择最核心的类型,或拆分为多个提交。
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 # 垃圾回收,清理旧对象

浙公网安备 33010602011771号