git-plus

Polar Sponsor
爱发电 赞助
.NET 9.0

增强版 Git:支持高级工作流、Git 钩子、CI/CD 集成、单体仓库(monorepo)支持、Git LFS,以及 Git 内部机制深度解析。

Git Plus. 增强Git 具有高级工作流程,悬钩,以及 CI/CD 集成.

功能概述

Git Plus. 增强Git 具有高级工作流程,悬钩,以及 CI/CD 集成.是一项面向实际任务的技能,主要用于Features. 高级工作流程: Gitflow, 树干基, GitHub Flow.;Git Hooks : 预承诺,预推,承诺-msg hooks.。

核心要点

  • 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
  • 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
  • 从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。

使用与执行

实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;

结果检查与注意事项

涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。

Git Plus

增强版 Git,支持高级工作流、钩子(hooks)及 CI/CD 集成。

特性

  • 高级工作流:Gitflow、基于主干的开发(Trunk-Based Development)、GitHub Flow
  • Git 钩子:pre-commit、pre-push、commit-msg 钩子
  • CI/CD 集成:GitHub Actions、GitLab CI 流水线
  • 单体仓库(Monorepo)支持:工作树(worktrees)、稀疏检出(sparse checkout)、子模块(submodules)
  • Git 内部机制:对象(objects)、引用(refs)、打包文件(packfiles)

速查表

任务 命令
状态 git status -sb
日志 git log --oneline -10 --graph
差异 git diff --stat HEAD~5
暂存 git stash push -m "description"
变基 git rebase -i HEAD~5

高级工作流

Gitflow

# 功能分支
git checkout -b feature/new-feature develop
git commit -m "feat: add new feature"
git checkout develop
git merge --no-ff feature/new-feature

# 发布分支
git checkout -b release/1.0.0 develop
git commit -m "chore: bump version"
git checkout main
git merge --no-ff release/1.0.0
git tag -a v1.0.0 -m "Release 1.0.0"

# 热修复分支
git checkout -b hotfix/urgent-fix main
git commit -m "fix: urgent issue"
git checkout main
git merge --no-ff hotfix/urgent-fix

基于主干的开发(Trunk-Based Development)

# 生命周期较短的功能分支
git checkout -b feature/short-lived
git commit -m "feat: quick change"
git push origin feature/short-lived
# 创建 PR 并合并至 main

# 直接提交(适用于小型变更)
git checkout main
git pull origin main
git commit -m "feat: small change"
git push origin main

GitHub Flow

# 创建分支
git checkout -b feature/my-feature

# 修改代码
git add .
git commit -m "feat: add feature"

# 推送并创建 PR
git push origin feature/my-feature
# 通过 GitHub UI 创建 PR

# 审查通过后,通过 GitHub 合并

Git 钩子

pre-commit 钩子

#!/bin/bash
# .git/hooks/pre-commit

# 运行代码检查器(linter)
npm run lint

# 运行测试
npm test

# 检查敏感信息
if grep -r "password|secret|api_key" --include="*.js" --include="*.ts" .; then
  echo "Error: Potential secrets found"
  exit 1
fi

commit-msg 钩子

#!/bin/bash
# .git/hooks/commit-msg

# 校验约定式提交(Conventional Commit)格式
commit_msg=$(cat "$1")
pattern="^(feat|fix|docs|style|refactor|test|chore)((.+))?: .{1,72}"

if ! echo "$commit_msg" | grep -qE "$pattern"; then
  echo "Error: Invalid commit message format"
  echo "Format: type(scope): description"
  echo "Example: feat(auth): add login page"
  exit 1
fi

pre-push 钩子

#!/bin/bash
# .git/hooks/pre-push

# 推送前运行测试
npm test

# 检查是否为强制推送(force push)
for ref in "$@"; do
  if echo "$ref" | grep -qE "refs/heads/(main|master|develop)$"; then
    read -p "Force push to protected branch? (y/n) " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
      exit 1
    fi
  fi
done

安装钩子

# 将钩子脚本复制到 .git/hooks 目录
cp hooks/* .git/hooks/

# 或使用 Husky(Node.js)
npx husky install
npx husky add .git/hooks/pre-commit "npm run lint"

CI/CD 集成

GitHub Actions

# .github/workflows/ci.yml
name: CI

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm ci
      - run: npm test
      - run: npm run lint

  deploy:
    needs: test
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci
      - run: npm run build
      - run: npm run deploy

GitLab CI

# .gitlab-ci.yml
stages:
  - test
  - build
  - deploy

test:
  stage: test
  script:
    - npm ci
    - npm test
    - npm run lint

build:
  stage: build
  script:
    - npm ci
    - npm run build
  artifacts:
    paths:
      - dist/

deploy:
  stage: deploy
  script:
    - npm run deploy
  only:
    - main

单体仓库(Monorepo)支持

Git 工作树(Worktrees)

# 为功能分支添加工作树
git worktree add ../feature-branch feature/branch

# 列出所有工作树
git worktree list

# 删除工作树
git worktree remove ../feature-branch

稀疏检出(Sparse Checkout)

# 启用稀疏检出
git sparse-checkout init --cone

# 设置需检出的目录
git sparse-checkout set packages/frontend packages/shared

# 禁用稀疏检出(恢复完整检出)
git sparse-checkout disable

子模块(Submodules)

# 添加子模块
git submodule add https://github.com/user/repo.git libs/repo

# 更新子模块(含递归初始化)
git submodule update --init --recursive

# 克隆时同步拉取子模块
git clone --recurse-submodules https://github.com/user/repo.git

Git 内部机制

对象(Objects)

# 查看对象类型与大小
git cat-file -t 
git cat-file -s 

# 查看对象内容
git cat-file -p 

# 列出所有对象
git rev-list --objects --all

引用(Refs)

# 查看引用
git show-ref

# 查看引用日志(reflog)
git reflog

# 查找包含某次提交的所有分支
git branch --contains 

打包文件(Packfiles)

# 生成打包文件
git gc

# 校验打包文件
git verify-pack -v .git/objects/pack/*.idx

# 查看打包文件统计信息
git count-objects -v

高级命令

交互式变基(Interactive Rebase)

# 对最近 5 次提交执行交互式变基
git rebase -i HEAD~5

# 可用操作:
# p, pick = 保留该提交
# r, reword = 保留该提交,但编辑其提交信息
# e, edit = 保留该提交,进入修改模式(amend)
# s, squash = 合并到前一次提交中
# f, fixup = 类似 squash,但丢弃本次提交的信息
# d, drop = 删除该提交

拣选提交(Cherry-Pick)

# 拣选单次提交
git cherry-pick 

# 拣选提交范围
git cherry-pick ..

# 拣选但不自动提交
git cherry-pick --no-commit 

二分查找(Bisect)

# 启动二分查找
git bisect start
git bisect bad
git bisect good v1.0.0

# Git 自动检出中间提交
# 手动测试后,标记为 good 或 bad
git bisect good  # 或 git bisect bad

# 重置二分查找状态
git bisect reset

最佳实践

  1. 编写有意义的提交信息 —— 使用约定式提交(Conventional Commit)格式
  2. 保持提交粒度小 —— 每次提交仅包含一个逻辑变更
  3. 推送前执行变基 —— 维护清晰的历史记录
  4. 使用功能分支 —— 切勿直接向 main 分支提交
  5. 为发布版本打标签 —— 遵循语义化版本控制(Semantic Versioning)
  6. 使用 Git LFS —— 管理大文件
  7. 保护关键分支 —— 强制要求 PR 审查
  8. 定期清理 —— 删除已废弃的分支

相关专题

更多
git怎么对比两个版本的文件内容
git怎么对比两个版本的文件内容

要对比两个版本的 git 文件,请使用 git diff 命令:git diff 比较工作树和暂存区之间的差异。git diff 比较两个提交或标签之间的差异。git diff 输出显示差异块,其中 + 表示添加的行,- 表示删除的行, 表示修改的行。可使用 gitkraken、meld、beyond compare 等可视化工具更直观地查看差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.09

2281

6

git提交错误怎么撤回
git提交错误怎么撤回

git提交错误撤回的方法:git reset head^:撤回最后一次提交,恢复到提交前状态。git revert head:创建新提交,内容与之前提交相反。git reset :使用提交的 sha-1 哈希撤回指定提交。交互式舞台区:标记要撤回的特定更改,然后提交,排除已撤回更改。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.09

2517

7

git撤销提交的commit
git撤销提交的commit

Git是一个强大的版本控制系统,它提供了很多功能帮助开发人员有效地管理和控制代码的变更,本专题为大家提供git 撤销提交的commit相关的各种文章内容,供大家免费下载体验。

2023.07.24

714

5

git和svn的区别
git和svn的区别

git和svn的区别:1、定义不同;2、模型类型不同;3、存储单元不同;4、是否拥有全局版本号;5、内容完整性不同;6、版本库不同;7、克隆目录速度不同;8、分支不同。php中文网为大家带来了git和svn的相关知识、以及相关文章等内容。

2023.07.06

1260

6

自建git服务器
自建git服务器

git服务器是目前流行的分布式版本控制系统之一,可以让多人协同开发同一个项目。本专题为大家提供自建git服务器相关的各种文章、以及下载和课程。

2023.07.05

3859

9

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

0

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

0

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

0

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

0

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
vscode手册
vscode手册

共0课时 | 0人学习

Git 教程
Git 教程

共21课时 | 8.1万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.9万人学习