使用 Git Hooks 实现工作流自动化
Git Hooks 概述
什么是 Git Hooks?
Git Hooks 是在 Git 执行特定操作时自动运行的脚本。它们可以用于自动化任务、执行检查、强制规范等。
客户端 Hooks(本地执行)
提交相关:
| Hook | 说明 |
|---|---|
pre-commit |
提交前检查 |
prepare-commit-msg |
准备提交消息 |
commit-msg |
验证提交消息 |
post-commit |
提交后操作 |
2026/3/20大约 8 分钟
使用 Git Hooks 实现工作流自动化
Git Hooks 是在 Git 执行特定操作时自动运行的脚本。它们可以用于自动化任务、执行检查、强制规范等。
提交相关:
| Hook | 说明 |
|---|---|
pre-commit |
提交前检查 |
prepare-commit-msg |
准备提交消息 |
commit-msg |
验证提交消息 |
post-commit |
提交后操作 |
Git 在持续集成/持续部署中的应用
CI/CD 定义:
| 类型 | 定义 |
|---|---|
| 持续集成 (CI) | 开发者提交代码 → 自动构建 → 自动测试 → 代码质量检查 → 反馈结果 |
| 持续交付 (CD) | CI + 自动部署到测试环境 + 手动触发生产部署 |
| 持续部署 (CD) | CI + 自动部署到所有环境(包括生产环境) |
掌握日常开发中最常用的 Git 命令
# 在当前目录创建 Git 仓库
git init
# 在指定目录创建
git init my-project
# 创建裸仓库(无工作目录,用于服务器)
git init --bare my-project.git
# 指定默认分支名
git init --initial-branch=main
git init -b main
深入理解 Git 的设计哲学与内部工作机制
版本控制系统(Version Control System, VCS)是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。它的核心价值在于:
在各平台安装 Git 并进行最佳配置
安装选项建议:
| 选项 | 建议 |
|---|---|
| Git Bash Here | ✅ 右键菜单添加 Git Bash |
| Git GUI Here | ✅ 右键菜单添加 Git GUI |
| Git LFS | ✅ 大文件支持 |
| 默认编辑器 | VS Code(推荐)/ Vim / Notepad++ |
| PATH 环境变量 | ✅ Git from the command line and also from 3rd-party software |
| HTTPS 传输后端 | ✅ Use the OpenSSL library |
| 行尾转换 | ✅ Checkout Windows-style, commit Unix-style line endings |
| 终端模拟器 | ✅ Use MinTTY(Git Bash 默认终端) |
| 默认分支名 | ✅ Override the default branch name: main |
建立高效的团队开发流程
| 模式 | 说明 | 适用场景 |
|---|---|---|
| 集中式协作 | 所有开发者直接推送到中央仓库 | 小团队、私有项目 |
| 分布式协作 | 开发者在自己的 Fork 中开发,通过 PR 贡献 | 开源项目、大型团队 |
建立高效、规范的 Git 使用习惯
格式:
<type>(<scope>): <subject>
<空行>
<body>
<空行>
<footer>
常见 Git 问题的诊断与解决
# 查看 reflog 找到删除前的位置
git reflog
# 输出示例:
# abc1234 HEAD@{0}: checkout: moving from deleted-branch to main
# def5678 HEAD@{1}: commit: last commit on deleted-branch
# 恢复分支
git branch recovered-branch def5678
# 或者直接从 reflog 引用恢复
git checkout -b recovered-branch HEAD@{1}
掌握 Git 高级特性,提升工作效率
Reflog 记录了 HEAD 和分支引用的所有变化历史,是恢复"丢失"数据的救命工具。
# 查看 HEAD 的 reflog
git reflog
git reflog show HEAD
# 查看特定分支的 reflog
git reflog show main
# 详细格式
git reflog --date=iso
# 输出示例:
# abc1234 HEAD@{0}: commit: Add feature
# def5678 HEAD@{1}: checkout: moving from main to feature
# ghi9012 HEAD@{2}: commit: Fix bug
# jkl3456 HEAD@{3}: rebase finished: returning to refs/heads/main
深入理解 Git 分支模型与最佳实践
在 Git 中,分支本质上是指向某个提交对象的可移动指针。默认分支名是 main(或 master)。每次提交时,当前分支指针会自动向前移动。
说明:创建
feature分支后在其上提交 F、G,main仍指向 E,HEAD跟随feature移动到 G。