Codex CLI Git 工作流完整指南(2026)— 自动 Commit、PR 描述、代码审查

Codex CLI 不只是写代码——它也能深度融入你的 Git 工作流:自动生成规范的 commit message、起草 PR 描述、执行初步代码审查。本指南涵盖所有实用场景,附可直接使用的脚本和 Git Alias。

1. 自动生成 Commit Message

手写 commit message 既费时又容易写得不规范。Codex CLI 可以分析 staged diff 并生成符合 Conventional Commits 格式的提交信息。

基础用法

# 暂存你的改动
git add -p

# 让 Codex 根据 diff 生成 commit message
git diff --staged | codex "根据以上 diff 生成一条符合 Conventional Commits 规范的 commit message。
格式:<type>(<scope>): <description>
类型:feat/fix/refactor/test/docs/ci/chore
只输出 commit message 本身,不加任何解释"

Git Alias 一键使用

# 添加到 ~/.gitconfig
[alias]
  cm = "!git diff --staged | codex 'Generate a Conventional Commits message for this diff. Output only the commit message.' | git commit -F -"

# 使用
git add -p
git cm

生成多行 Commit Message(feat + 详细 body)

git diff --staged | codex "生成完整的 git commit message:
1. 第一行:<type>(<scope>): <简短描述>(不超过 72 字符)
2. 空行
3. Body:用 bullet points 说明具体改动(中文)
4. 如果有 breaking change,加 BREAKING CHANGE: 说明
只输出 message,不加任何前缀"
Conventional Commits 核心类型: feat(新功能)、fix(Bug 修复)、refactor(重构,不影响功能)、test(测试)、docs(文档)、ci(CI/CD 配置)、chore(构建工具、依赖更新)

2. 自动起草 Pull Request 描述

Codex 可以分析一个 branch 相对 main 的所有提交,自动生成结构化的 PR 标题和正文。

手动生成 PR 描述

# 获取相对 main 的提交列表
git log main..HEAD --oneline > /tmp/commits.txt

# 获取完整 diff
git diff main..HEAD > /tmp/diff.txt

# 生成 PR 描述
codex "根据以下提交记录和代码变更,生成一份规范的 Pull Request 描述(Markdown 格式):

提交记录:
$(cat /tmp/commits.txt)

## 要求:
- 标题:简洁的 PR 标题(不超过 72 字符)
- ## Summary:2-3 句话说明这个 PR 做了什么
- ## Changes:分类列出具体改动(使用 checkbox 格式 - [ ])
- ## Testing:描述测试方法
- ## Notes:任何注意事项(可选)"

GitHub CLI 集成(一键创建 PR)

# 安装 GitHub CLI(如果还没装)
brew install gh  # macOS

# 生成 PR 描述并直接创建 PR
PR_BODY=$(git log main..HEAD --oneline | codex "Generate a GitHub PR description in Markdown with Summary, Changes, and Testing sections")
gh pr create --title "$(git log -1 --pretty=%s)" --body "$PR_BODY"

GitHub Actions 自动化(在 push 时自动起草 PR)

# .github/workflows/auto-pr.yml
name: Auto Draft PR

on:
  push:
    branches-ignore: [main, master]

jobs:
  draft-pr:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Generate PR description
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
        run: |
          npm install -g @openai/codex
          COMMITS=$(git log origin/main..HEAD --oneline)
          DIFF=$(git diff origin/main..HEAD --stat)
          PR_BODY=$(echo "$COMMITS\n\n$DIFF" | codex exec "Generate a PR description with Summary, Changes (checkboxes), and Testing sections")
          echo "PR_BODY<<EOF" >> $GITHUB_ENV
          echo "$PR_BODY" >> $GITHUB_ENV
          echo "EOF" >> $GITHUB_ENV
      - name: Create draft PR
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          gh pr create --draft --title "$(git log -1 --pretty=%s)" --body "$PR_BODY" || true

3. AI 辅助代码审查

Codex 可以在你提交或 push 之前,对改动进行初步的自动化审查,发现潜在问题。

本地预提交审查

# 审查 staged 改动
git diff --staged | codex "对以下代码变更进行审查,重点检查:
1. 潜在的 Bug 或逻辑错误
2. 安全问题(SQL 注入、XSS、敏感数据泄露等)
3. 性能问题(N+1 查询、不必要的重复计算等)
4. 代码可读性(变量命名、函数长度、注释)
5. 遗漏的边界情况或错误处理
每个问题标注严重级别(🔴高/🟡中/🟢低)"

Pre-commit hook 自动审查

# .git/hooks/pre-commit
#!/bin/bash
echo "Running Codex code review..."
REVIEW=$(git diff --staged | codex exec "Review for critical bugs and security issues. Output 'PASS' if no critical issues, or list specific problems with line references.")
if echo "$REVIEW" | grep -q "CRITICAL\|SECURITY"; then
  echo "❌ Codex found critical issues:"
  echo "$REVIEW"
  echo "Use 'git commit --no-verify' to bypass (not recommended)"
  exit 1
fi
echo "✅ Codex review passed"

设置 hook 可执行权限:chmod +x .git/hooks/pre-commit

PR 代码审查(GitHub Actions)

# .github/workflows/ai-review.yml
name: AI Code Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: AI Review
        env:
          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          npm install -g @openai/codex
          DIFF=$(git diff origin/main..HEAD)
          REVIEW=$(echo "$DIFF" | codex exec "Review this PR diff for bugs, security issues, and code quality. Format as GitHub Markdown with specific file:line references.")
          gh pr comment ${{ github.event.pull_request.number }} --body "## 🤖 Automated Code Review\n\n$REVIEW"

4. 分支管理与 Merge 辅助

生成分支命名建议

codex "我要做以下改动:修复用户登录时 token 过期不跳转的问题。
建议一个规范的 git 分支名(格式:<type>/<short-description>,全小写,用连字符)"
# 输出示例:fix/auth-token-expiry-redirect

分析 Merge Conflict

# 当出现 merge conflict 时
cat conflicted-file.ts | codex "这个文件有 git merge conflict(<<<<<<< / ======= / >>>>>>> 标记)。
分析两个版本的改动,解释各自的意图,然后给出合并建议。
如果可以安全合并,直接输出合并后的代码。"

Rebase 辅助

# 在 interactive rebase 前分析提交
git log main..HEAD --oneline | codex "分析以上提交记录,建议如何整理(squash 哪些、reword 哪些、保留哪些),给出 git rebase -i 需要的操作序列"

5. .codexignore — 保护 Git 敏感文件

# 在项目根目录创建 .codexignore
cat > .codexignore << 'EOF'
# Git 内部文件(不应被 Codex 修改)
.git/

# 敏感配置
.env
.env.local
.env.production
secrets/
credentials/

# 大型二进制文件
*.jpg *.png *.gif *.ico *.woff *.woff2
dist/
build/
node_modules/
EOF
注意: .codexignore 语法与 .gitignore 相同。Codex 不会读取或修改匹配的文件,但也无法利用其中的上下文。合理划定边界:保护敏感文件的同时,不要把太多代码文件排除在外。

6. AGENTS.md Git 相关配置

# AGENTS.md — Git 操作限制

## 允许的操作
- 读取所有源代码文件
- 修改 src/、tests/、docs/ 下的文件
- 创建新文件(不包括 .git/ 目录)

## 禁止的操作
- 不得删除 .git/ 目录
- 不得修改 .gitignore(除非明确要求)
- 不得运行 git push --force
- 不得修改 git config

## Git Commit 规范
生成 commit message 时遵循 Conventional Commits 规范。
所有提交信息使用英文。

7. 完整 Git 工作流自动化脚本

以下脚本将代码审查、Commit Message 生成、提交三步合为一个命令,适合日常开发使用。

#!/bin/bash
# codex-git-workflow.sh — 完整的 AI 辅助 Git 工作流

set -e

# 1. 检查是否有 staged 文件
if ! git diff --cached --quiet; then
  echo "No staged changes. Use 'git add' first."
  exit 1
fi

# 2. AI 代码审查
echo "🔍 Running AI code review..."
REVIEW=$(git diff --staged | codex exec "Review for bugs and security issues. Output PASS or list critical issues.")
if echo "$REVIEW" | grep -qi "CRITICAL\|SECURITY"; then
  echo "❌ Issues found:"
  echo "$REVIEW"
  read -p "Continue anyway? (y/N) " yn
  [[ "$yn" != "y" ]] && exit 1
fi

# 3. 生成 commit message
echo "📝 Generating commit message..."
COMMIT_MSG=$(git diff --staged | codex exec "Generate a Conventional Commits message. Output only the message.")
echo "Suggested: $COMMIT_MSG"
read -p "Use this message? (Y/n) " yn
if [[ "$yn" == "n" ]]; then
  read -p "Enter commit message: " COMMIT_MSG
fi

# 4. 提交
git commit -m "$COMMIT_MSG"
echo "✅ Committed: $COMMIT_MSG"

设置脚本可执行权限:chmod +x codex-git-workflow.sh

8. 常见问题

Codex CLI 可以自动生成 git commit message 吗?

可以。运行以下命令即可获得规范的提交信息:

git diff --staged | codex "根据以上 diff 生成一条符合 Conventional Commits 规范的 commit message,只输出 message 本身"

也可以配合 git alias 一键使用,参见上方「Git Alias 一键使用」章节。Codex 会分析 diff 内容,自动判断 commit 类型(feat/fix/refactor 等)并生成准确的描述。

Codex CLI 可以帮我写 PR 描述吗?

可以。将 git loggit diff 输入给 Codex,让它生成结构化的 PR 标题和正文(包含 Summary、Changes、Testing 章节)。在 GitHub Actions 中可以完全自动化这一流程——每次 push 到功能分支时自动起草 PR,大幅减少重复劳动。

Codex CLI 可以做代码审查吗?

可以进行自动化的初步代码审查。Codex 会分析 diff,识别潜在的 Bug、安全问题(SQL 注入、XSS 等)、性能瓶颈(N+1 查询)和代码风格问题,并给出具体建议。它不能替代人工审查,但可以在提交前帮你发现明显问题,提升代码质量。

如何防止 Codex CLI 修改 .git 或 node_modules 目录?

有两种方式:

← CI/CD 集成指南 提示词示例 →