本文档是关于 Git 版本控制系统的综合指南,涵盖了从基础到高级的各种命令和最佳实践。它旨在为开发者提供一个全面的资源,帮助他们更有效地使用 Git 进行代码版本管理、团队协作以及项目开发。文档分为两个主要部分:Git 命令大全和 Git 提交信息规范。
Git 安装文档 : [笔记] Windows 上 Git 安装详细教程:从零开始,附带每个选项解析
一、Git 命令大全
Git 是一个分布式版本控制系统,它允许团队协作开发项目,同时跟踪代码的变化。以下是一些常用的 Git 命令,分为不同的类别以帮助你更有效地使用 Git。
1.配置与初始化
git config --global user.name "Your Name"
: 设置提交者的用户名。git config --global user.email "your.email@example.com"
: 设置提交者的电子邮件地址。git init
: 初始化一个新的 Git 仓库。git clone <repository-url>
: 克隆一个远程仓库到本地。
2.工作区和暂存区管理
git status
: 显示工作区状态,包括哪些文件被修改、新增或删除。git add <file>
: 将更改添加到暂存区。git add .
: 将所有更改(新文件和修改过的文件)添加到暂存区。git add -A
或git add --all
: 将所有更改(新文件、修改过的文件和删除的文件)添加到暂存区。git add -u
: 更新已经跟踪的文件(即修改过的文件和删除的文件),不会添加新的文件。git reset <file>
: 从暂存区移除文件但保留工作区的更改。git rm <file>
: 从工作区和暂存区中删除文件。git mv <old-file> <new-file>
: 移动或重命名文件。
3.提交历史
git commit -m "Commit message"
: 提交暂存区的更改,并附带一条信息。git commit --amend
: 修改最后一次提交(可以用来更新提交信息或添加遗漏的更改)。git log
: 查看提交历史。git show <commit>
: 显示特定提交的详细信息。git diff
: 显示工作区和暂存区之间的差异。git diff --staged
: 显示暂存区和最近一次提交之间的差异。git diff <commit> <commit>
: 比较两个提交之间的差异。git blame <file>
: 显示每个文件行的最后修改者和时间。git bisect
: 用于通过二分查找法定位引入错误的提交。
4.分支操作
git branch
: 列出所有分支。git branch <branch-name>
: 创建新分支。git checkout <branch-name>
: 切换到指定分支。git checkout -b <branch-name>
: 创建并切换到新分支。git merge <branch-name>
: 合并指定分支到当前分支。git rebase <branch-name>
: 将当前分支的更改重新应用到指定分支的顶部。git branch -d <branch-name>
: 删除本地分支。git push origin --delete <branch-name>
: 删除远程分支。
5.远程仓库
git remote -v
: 查看配置的远程仓库。git remote add origin <repository-url>
: 添加远程仓库。git fetch <remote>
: 从远程仓库获取最新数据但不合并。git pull <remote> <branch>
: 从远程仓库拉取最新数据并合并到当前分支。git push <remote> <branch>
: 推送本地分支的更改到远程仓库。git push --tags
: 推送标签到远程仓库。
6.标签
git tag <tagname>
: 创建轻量级标签。git tag -a <tagname> -m "Tag message"
: 创建带有注释的标签。git show <tagname>
: 显示标签的详细信息。git tag -d <tagname>
: 删除本地标签。git push origin :refs/tags/<tagname>
: 删除远程标签。
7.版本回退
git revert <commit>
: 创建一个新的提交来撤销指定提交的更改。git reset --hard <commit>
: 回滚到指定提交,丢弃之后的所有更改。git reset --soft <commit>
: 回滚到指定提交,保留工作区和暂存区的更改。git reset --mixed <commit>
: 回滚到指定提交,保留工作区的更改但清空暂存区。
8.其他
git stash
: 暂存当前的工作进度,使你可以切换到其他分支进行工作,然后再恢复这些更改。git stash list
: 查看所有的暂存。git stash apply
: 恢复最新的暂存,但不删除它。git stash drop
: 删除最新的暂存。git stash pop
: 恢复并删除最新的暂存。
9.快速参考
常用命令速查表
功能 | 命令 |
---|---|
初始化仓库 | git init |
克隆仓库 | git clone <repository-url> |
查看状态 | git status |
添加更改到暂存区 | git add <file> / git add . / git add -A |
提交更改 | git commit -m "Commit message" |
查看提交历史 | git log |
创建分支 | git branch <branch-name> |
切换分支 | git checkout <branch-name> |
合并分支 | git merge <branch-name> |
推送更改 | git push <remote> <branch> |
拉取更改 | git pull <remote> <branch> |
高级命令速查表
功能 | 命令 |
---|---|
修改最后一次提交 | git commit --amend |
撤销提交 | git revert <commit> |
回滚到指定提交 | git reset --hard <commit> |
暂存更改 | git stash |
查看暂存列表 | git stash list |
应用暂存 | git stash apply |
删除暂存 | git stash drop |
恢复并删除暂存 | git stash pop |
查看文件行的历史 | git blame <file> |
定位引入错误的提交 | git bisect |
二、Git 提交信息
为了保持代码变更历史的清晰和易于理解,使用标准化的提交信息格式是非常重要的。以下是提交信息结构、常见的提交类型以及一些实用的提交信息示例。
1.提交信息格式
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
- type:提交的类别。
- scope:可选,指明本次提交影响的范围(如模块、文件、组件等)。
- subject:简短、明确地描述提交的目的,使用祈使句形式,首字母小写,结尾不加标点符号。
- body:详细描述提交的内容,解释变更的理由或与之前行为的不同之处。
- footer :包含Breaking Changes或者关闭相关Issue的信息。
2.常见的 type 类型
- feat:新增功能(feature)
- fix:修复bug
- docs:文档更新
- style:不影响代码含义的更改(如格式化、缺少分号、空格调整等)
- refactor:重构代码(既不是新增功能也不是修复bug)
- perf:性能优化
- test:添加缺少的测试或更正现有测试
- chore:对构建过程或辅助工具和库的更改(如文档生成脚本)
- ci:持续集成配置文件和脚本的更改
- revert:回滚到上一个版本
- build:改变构建流程,新增依赖库、工具等
- delete:删除功能或文件
- modify:修改功能
3.提交信息示例
-
新增功能
feat(user): 添加登录功能
-
修复bug
fix(authentication): 解决用户认证中的空指针异常
-
文档更新
docs(README.md): 更新安装说明
-
样式调整
style(css): 改进按钮样式以提升用户体验
-
代码重构
refactor(service): 将大型服务拆分为更小的服务
-
性能优化
perf(api): 优化查询以减少响应时间
-
添加测试
test(unit): 为用户模型添加单元测试
-
辅助任务
chore(deps): 升级lodash从4.17.20到4.17.21
-
持续集成
ci(pipeline): 为预发布环境添加部署步骤
-
回滚更改
revert: 回滚上一次提交,因引入破坏性变更
命令示例 git commit -m "feat(user): 添加登录功能"
4.额外提示
- Breaking Changes :如果提交引入了破坏性的变更(即不兼容的API变更),可以在提交信息的footer部分注明
BREAKING CHANGE:
,后面跟随简短描述。 - Closes/Fixes :如果你的提交解决了某个Issue,可以在提交信息的footer部分写上
Closes #issue-number
或Fixes #issue-number
,这样一些Git托管平台(如GitHub、GitLab)会自动关闭相应的Issue。 - Co-authored-by :如果有多个作者参与了同一个提交,可以在提交信息的footer部分加上
Co-authored-by: Name <email>
来标注所有贡献者。