CodeL
以前端为翼,以 AI 为脑,向全栈而行
2026-03-31

GitHub 完全指南:从入门到精通

GitHub 完全指南:从入门到精通 一篇搞定:GitHub 是什么、怎么用、Issue/PR/Actions 等核心功能全覆盖 目录 一、核心概念 二、基础使用 三、Issue 管理 四、Pull Request 完全...

GitHub 完全指南:从入门到精通 #

一篇搞定:GitHub 是什么、怎么用、Issue/PR/Actions 等核心功能全覆盖


目录 #


一、核心概念 #

1.1 什么是 GitHub? #

GitHub = 代码托管平台 + 协作开发平台

打个比方:

  • Git 是「版本控制系统」,记录代码的每次修改
  • GitHub 是「代码仓库」,把代码存在云端,方便分享和协作
  • 就像 Git 是本地硬盘,GitHub 是云盘

GitHub 能做什么?

功能 说明
代码托管 存储代码,支持 Git 操作
版本控制 记录每次修改,随时回退
协作开发 多人协作,代码审查
Issue 追踪 管理 Bug、功能需求、任务
Pull Request 提交代码变更,请求合并
Actions 自动化构建、测试、部署
Packages 托管 npm/Docker 等包
Pages 免费静态网站托管
Copilot AI 编程助手

1.2 核心名词速查 #

名词 英文 含义
仓库 Repository (Repo) 存放代码的地方
分支 Branch 独立的开发线
提交 Commit 一次代码修改记录
推送 Push 上传代码到远程仓库
拉取 Pull 下载远程代码到本地
合并 Merge 把分支合并到主分支
克隆 Clone 复制远程仓库到本地
复刻 Fork 复制别人的仓库到自己账号下
拉取请求 Pull Request (PR) 请求合并代码
议题 Issue 问题、需求、任务
动作 Actions 自动化工作流
工作流 Workflow Actions 的配置文件
标签 Label 分类标记
里程碑 Milestone 版本目标

1.3 GitHub vs Git #

对比项 Git GitHub
类型 版本控制工具 代码托管平台
运行位置 本地 云端
是否需要网络 ❌ 否 ✅ 是
协作功能 ❌ 无 ✅ 有(Issue/PR/Actions)
费用 免费 免费 + 付费(私有团队)

二、基础使用 #

2.1 注册与配置 #

1. 注册 GitHub 账号

访问 github.com 注册(免费)。

2. 配置 SSH Key(推荐)

# 生成 SSH Key
ssh-keygen -t ed25519 -C "your-email@example.com"
 
# 查看公钥
cat ~/.ssh/id_ed25519.pub
 
# 复制公钥,粘贴到 GitHub → Settings → SSH and GPG keys → New SSH key

3. 配置 Git 用户信息

# 设置用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email "your-email@example.com"
 
# 查看配置
git config --list

2.2 创建仓库 #

方法一:网页创建

  1. 点击右上角 +New repository
  2. 填写仓库信息:
    • Repository name: 仓库名
    • Description: 描述(可选)
    • Public/Private: 公开/私有
    • Add README: 添加 README 文件
    • Add .gitignore: 添加忽略文件
    • Choose a license: 选择开源协议
  3. 点击 Create repository

方法二:命令行创建

# 创建本地仓库
mkdir my-project
cd my-project
git init
 
# 创建 README
echo "# My Project" > README.md
 
# 提交
git add .
git commit -m "Initial commit"
 
# 添加远程仓库(先在 GitHub 上创建空仓库)
git remote add origin git@github.com:username/my-project.git
 
# 推送
git push -u origin main

方法三:使用 GitHub CLI

# 安装 GitHub CLI
# macOS: brew install gh
# Windows: winget install GitHub.cli
# Linux: 包管理器安装
 
# 登录
gh auth login
 
# 创建仓库
gh repo create my-project --public --clone
 
# 创建并推送
gh repo create my-project --public --source=. --push

2.3 日常操作 #

克隆仓库

# HTTPS
git clone https://github.com/username/repo.git
 
# SSH
git clone git@github.com:username/repo.git
 
# GitHub CLI
gh repo clone username/repo

分支操作

# 查看分支
git branch              # 本地分支
git branch -r           # 远程分支
git branch -a           # 所有分支
 
# 创建分支
git branch feature-1    # 创建
git checkout feature-1  # 切换
git checkout -b feature-1  # 创建并切换(推荐)
git switch -c feature-1    # 新语法
 
# 推送分支
git push origin feature-1
 
# 删除分支
git branch -d feature-1       # 本地
git push origin --delete feature-1  # 远程

提交与推送

# 查看状态
git status
 
# 添加文件
git add file.txt        # 单个文件
git add .               # 所有文件
git add -p              # 交互式添加
 
# 提交
git commit -m "feat: add new feature"
 
# 推送
git push                # 推送当前分支
git push -u origin main # 推送并设置上游

拉取更新

# 拉取并合并
git pull origin main
 
# 只拉取不合并
git fetch origin
 
# 变基(推荐用于保持提交历史整洁)
git pull --rebase origin main

2.4 .gitignore 文件 #

告诉 Git 忽略哪些文件。

# .gitignore 示例
 
# 依赖
node_modules/
vendor/
 
# 构建产物
dist/
build/
*.min.js
 
# 环境配置
.env
.env.local
.env.*.local
 
# IDE
.idea/
.vscode/
*.swp
*.swo
 
# 系统文件
.DS_Store
Thumbs.db
 
# 日志
*.log
logs/
 
# 临时文件
*.tmp
*.temp
.cache/

常用模板: github.com/github/gitignore


三、Issue 管理 #

3.1 什么是 Issue? #

Issue = 问题追踪卡片

可以用来:

  • 报告 Bug
  • 提出新功能需求
  • 讨论设计方案
  • 追踪任务进度
  • 记录待办事项

3.2 创建 Issue #

网页创建:

  1. 进入仓库 → IssuesNew issue
  2. 填写内容:
    • Title: 标题(简洁明确)
    • Description: 详细描述
    • Labels: 标签(分类)
    • Assignees: 负责人
    • Projects: 关联项目
    • Milestone: 里程碑
  3. 点击 Submit new issue

命令行创建:

# 使用 GitHub CLI
gh issue create --title "Bug: 登录页面样式错乱" --body "描述内容..."
 
# 交互式创建
gh issue create -w

3.3 Issue 模板 #

创建 .github/ISSUE_TEMPLATE/ 目录,放置模板文件。

Bug 报告模板:

<!-- .github/ISSUE_TEMPLATE/bug_report.md -->
---
name: Bug 报告
about: 报告一个 Bug
title: '[Bug] '
labels: bug
assignees: ''
---
 
## Bug 描述
清晰地描述这个 Bug 是什么。
 
## 复现步骤
1. 进入 '...'
2. 点击 '...'
3. 看到 '...'
 
## 预期行为
描述你期望发生什么。
 
## 实际行为
描述实际发生了什么。
 
## 截图
如果适用,添加截图帮助解释问题。
 
## 环境信息
- OS: [如 macOS, Windows, Linux]
- Browser: [如 Chrome, Safari, Firefox]
- Version: [如 1.0.0]
 
## 其他信息
其他任何有助于解决问题的信息。

功能请求模板:

<!-- .github/ISSUE_TEMPLATE/feature_request.md -->
---
name: 功能请求
about: 提出一个新功能建议
title: '[Feature] '
labels: enhancement
assignees: ''
---
 
## 功能描述
清晰地描述你想要的功能。
 
## 问题背景
这个功能解决了什么问题?
 
## 建议方案
你希望如何实现这个功能?
 
## 替代方案
你考虑过的其他替代方案。
 
## 附加信息
任何其他相关信息或截图。

3.4 Issue 标签管理 #

常用标签:

标签 颜色 用途
bug 🟠 橙色 Bug 报告
enhancement 🔵 蓝色 功能增强
feature 🟢 绿色 新功能
documentation 🔵 蓝色 文档相关
good first issue 🟢 绿色 适合新手
help wanted 🟡 黄色 需要帮助
question 🟣 紫色 问题讨论
wontfix ⚪ 白色 不会修复
duplicate 🔵 蓝色 重复 Issue
`invalid`` 🔴 红色 无效 Issue

创建标签:

# GitHub CLI
gh label create "bug" --color "d73a4a" --description "Something isn't working"

3.5 Issue 最佳实践 #

标题命名规范:

[Bug] 登录页面在移动端样式错乱
[Feature] 添加暗黑模式支持
[Docs] 更新 API 文档
[Refactor] 重构用户模块
[Performance] 优化首页加载速度

描述规范:

## 问题描述
简洁描述问题是什么。
 
## 复现步骤
1. 步骤一
2. 步骤二
3. 步骤三
 
## 期望结果
应该如何表现。
 
## 实际结果
实际如何表现。
 
## 环境信息
- 操作系统:
- 浏览器:
- 版本:
 
## 相关信息
- 相关 Issue: #123
- 相关 PR: #456

3.6 Issue 自动化 #

自动关闭 Issue:

在 PR 或 Commit 中使用关键词:

# 合并 PR 时自动关闭
git commit -m "fix: 修复登录问题,关闭 #123"
 
# 关键词
fixes #123
closes #123
resolves #123
 
# 多个 Issue
fixes #123, fixes #456

自动标签:

使用 GitHub Actions 自动为新 Issue 添加标签:

# .github/workflows/label.yml
name: Auto Label
on:
  issues:
    types: [opened]
 
jobs:
  label:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/github-script@v7
        with:
          script: |
            const issue = context.payload.issue;
            const labels = [];
            
            if (issue.title.includes('[Bug]')) {
              labels.push('bug');
            }
            if (issue.title.includes('[Feature]')) {
              labels.push('enhancement');
            }
            
            if (labels.length > 0) {
              await github.rest.issues.addLabels({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: issue.number,
                labels: labels
              });
            }

四、Pull Request 完全指南 #

4.1 什么是 Pull Request? #

Pull Request (PR) = 代码合并请求

流程:

  1. 你在分支上修改代码
  2. 提交 PR,请求把你的代码合并到主分支
  3. 其他人审查代码(Code Review)
  4. 审查通过后合并

PR 的作用:

  • 代码审查,保证质量
  • 讨论设计方案
  • 触发自动化测试
  • 记录代码变更历史

4.2 创建 PR #

完整流程:

# 1. Fork 仓库(如果是别人的项目)
# 在 GitHub 页面点击 Fork
 
# 2. 克隆到本地
git clone git@github.com:your-username/repo.git
 
# 3. 创建分支
git checkout -b feature/add-login
 
# 4. 修改代码
# ... 编辑文件 ...
 
# 5. 提交
git add .
git commit -m "feat: add login page"
 
# 6. 推送分支
git push origin feature/add-login
 
# 7. 在 GitHub 页面创建 PR
# 或使用 CLI
gh pr create --title "feat: add login page" --body "描述..."

GitHub CLI 创建 PR:

# 交互式创建
gh pr create
 
# 完整参数
gh pr create \
  --title "feat: add login page" \
  --body "详见下方描述" \
  --base main \
  --head feature/add-login \
  --reviewer username1,username2 \
  --assignee @me \
  --label enhancement
 
# 从模板创建
gh pr create --template

4.3 PR 模板 #

创建 .github/pull_request_template.md

## 变更类型
- [ ] Bug 修复
- [ ] 新功能
- [ ] 重构
- [ ] 文档更新
- [ ] 性能优化
 
## 变更描述
简洁描述这个 PR 做了什么。
 
## 相关 Issue
关闭 #123
 
## 变更内容
- 添加了登录页面
- 实现了表单验证
- 添加了单元测试
 
## 测试
- [ ] 本地测试通过
- [ ] 单元测试通过
- [ ] E2E 测试通过
 
## 截图
如果有 UI 变更,添加截图。
 
## Checklist
- [ ] 代码遵循项目规范
- [ ] 已添加必要的注释
- [ ] 已更新相关文档
- [ ] 已添加测试用例

4.4 Code Review #

审查别人的 PR:

  1. 打开 PR 页面
  2. 点击 Files changed
  3. 在代码行旁边添加评论
  4. 点击 Start a reviewSubmit review

Review 状态:

状态 含义
Comment 仅评论,不表态
Approve 批准合并
Request Changes 要求修改后重新审查

审查建议:

# 好的审查评论
 
## 建议改进
```suggestion
const result = data.filter(item => item.active);

这样更简洁。

提问 #

这里为什么要用 setTimeout?有更好的方案吗?

指出问题 #

⚠️ 这里没有处理错误情况,建议添加 try-catch。

肯定 #

👍 这个重构很棒,代码清晰多了!

 
### 4.5 PR 合并策略
 
**Merge(普通合并):**
 
```bash
# 在 GitHub 页面点击 "Merge pull request"
# 会创建一个 merge commit

Squash and Merge(压缩合并):

# 把所有 commit 压缩成一个
# 保持主分支历史整洁

Rebase and Merge(变基合并):

# 变基后合并,不产生 merge commit
# 保持线性历史

命令行合并:

# 普通 merge
git checkout main
git merge feature/add-login
 
# Squash merge
git merge --squash feature/add-login
git commit -m "feat: add login page"
 
# Rebase
git checkout feature/add-login
git rebase main
git checkout main
git merge feature/add-login

4.6 PR 最佳实践 #

标题规范:

feat: 添加用户登录功能
fix: 修复登录页面样式问题
docs: 更新 API 文档
refactor: 重构用户模块
test: 添加登录功能测试
chore: 更新依赖版本

Commit 规范(Conventional Commits):

feat: 新功能
fix: Bug 修复
docs: 文档变更
style: 代码格式(不影响逻辑)
refactor: 重构
perf: 性能优化
test: 测试
chore: 构建/工具变更
ci: CI 配置变更

小而专注的 PR:

✅ 好 ❌ 不好
只改一个功能 同时改多个不相关功能
200-400 行代码 2000+ 行代码
一眼能看完 需要花很长时间审查

五、GitHub Actions 自动化 #

5.1 什么是 GitHub Actions? #

Actions = 自动化工作流

可以用来自动:

  • 运行测试
  • 构建项目
  • 部署应用
  • 发布包
  • 发送通知

5.2 基础语法 #

# .github/workflows/ci.yml
name: CI                    # 工作流名称
 
on:                         # 触发条件
  push:                     # 推送时触发
    branches: [main]        # 指定分支
  pull_request:             # PR 时触发
    branches: [main]
 
jobs:                       # 任务列表
  test:                     # 任务名称
    runs-on: ubuntu-latest  # 运行环境
    
    steps:                  # 步骤列表
      - name: Checkout      # 步骤名称
        uses: actions/checkout@v4  # 使用 action
        
      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          
      - name: Install
        run: npm ci
        
      - name: Test
        run: npm test

5.3 常用触发条件 #

on:
  # 推送时触发
  push:
    branches: [main, develop]
    paths:
      - 'src/**'            # 只有 src 目录变更才触发
      - 'package.json'
  
  # PR 时触发
  pull_request:
    branches: [main]
  
  # 定时触发
  schedule:
    - cron: '0 0 * * *'     # 每天 0 点
  
  # 手动触发
  workflow_dispatch:
    inputs:
      environment:
        description: 'Deploy environment'
        required: true
        default: 'staging'
  
  # 其他工作流完成后触发
  workflow_run:
    workflows: ["CI"]
    types: [completed]

5.4 实用工作流示例 #

CI/CD 工作流:

# .github/workflows/ci.yml
name: CI/CD
 
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
 
jobs:
  test:
    runs-on: ubuntu-latest
    
    strategy:
      matrix:
        node-version: [18, 20, 22]
    
    steps:
      - uses: actions/checkout@v4
      
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
          cache: 'npm'
      
      - run: npm ci
      - run: npm run lint
      - run: npm test
      - run: npm run build
      
      - name: Upload coverage
        uses: codecov/codecov-action@v4
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
 
  deploy:
    needs: test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    
    steps:
      - uses: actions/checkout@v4
      
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'
      
      - run: npm ci
      - run: npm run build
      
      - name: Deploy to Vercel
        uses: amondnet/vercel-action@v25
        with:
          vercel-token: ${{ secrets.VERCEL_TOKEN }}
          vercel-org-id: ${{ secrets.VERCEL_ORG_ID }}
          vercel-project-id: ${{ secrets.VERCEL_PROJECT_ID }}

发布 npm 包:

# .github/workflows/publish.yml
name: Publish to npm
 
on:
  release:
    types: [created]
 
jobs:
  publish:
    runs-on: ubuntu-latest
    
    steps:
      - uses: actions/checkout@v4
      
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
          registry-url: 'https://registry.npmjs.org'
      
      - run: npm ci
      - run: npm run build
      - run: npm test
      
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

自动发布 Release:

# .github/workflows/release.yml
name: Release
 
on:
  push:
    branches: [main]
 
jobs:
  release:
    runs-on: ubuntu-latest
    if: "!contains(github.event.head_commit.message, 'ci skip')"
    
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
          
      - run: npm ci
      
      - name: Release
        run: npx semantic-release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

5.5 Secrets 管理 #

添加 Secrets:

  1. 进入仓库 → SettingsSecrets and variablesActions
  2. 点击 New repository secret
  3. 填写 Name 和 Value
  4. 点击 Add secret

使用 Secrets:

steps:
  - name: Deploy
    run: |
      curl -X POST \
        -H "Authorization: Bearer ${{ secrets.DEPLOY_TOKEN }}" \
        https://api.example.com/deploy

常用 Secrets:

Secret 用途
NPM_TOKEN 发布 npm 包
GITHUB_TOKEN 自动提供,无需配置
VERCEL_TOKEN 部署到 Vercel
DOCKER_PASSWORD 推送 Docker 镜像
AWS_ACCESS_KEY_ID AWS 服务
AWS_SECRET_ACCESS_KEY AWS 服务

六、高级功能 #

6.1 GitHub Pages #

免费托管静态网站。

配置方式:

  1. 进入仓库 → SettingsPages
  2. Source 选择:
    • Deploy from a branch: 从分支部署
    • GitHub Actions: 使用 Actions 部署
  3. 选择分支和目录(/root/docs
  4. 点击 Save

自动部署:

# .github/workflows/pages.yml
name: Deploy to Pages
 
on:
  push:
    branches: [main]
 
permissions:
  contents: read
  pages: write
  id-token: write
 
jobs:
  deploy:
    runs-on: ubuntu-latest
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    
    steps:
      - uses: actions/checkout@v4
      
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
          
      - run: npm ci
      - run: npm run build
      
      - uses: actions/configure-pages@v4
      - uses: actions/upload-pages-artifact@v3
        with:
          path: './dist'
          
      - id: deployment
        uses: actions/deploy-pages@v4

访问地址:

https://username.github.io/repo-name/

6.2 GitHub Packages #

托管 npm/Docker/Maven 等包。

发布 npm 包到 GitHub Packages:

// package.json
{
  "name": "@username/package-name",
  "publishConfig": {
    "registry": "https://npm.pkg.github.com"
  }
}
# 认证
npm login --scope=@username --registry=https://npm.pkg.github.com
 
# 发布
npm publish

安装:

# .npmrc
@username:registry=https://npm.pkg.github.com
npm install @username/package-name

6.3 GitHub Projects #

项目管理工具(看板)。

创建 Project:

  1. 点击 ProjectsNew project
  2. 选择模板:BoardTableRoadmap
  3. 添加 Issue/PR 到 Project

自动化:

  • Issue 创建 → 自动添加到 Todo
  • PR 创建 → 自动移动到 In Progress
  • PR 合并 → 自动移动到 Done

6.4 GitHub Discussions #

社区讨论区。

用途:

  • 公告
  • Q&A 问答
  • 功能讨论
  • 展示项目

配置:

  1. 进入仓库 → Settings
  2. 勾选 Discussions
  3. 选择分类模板

6.5 GitHub Copilot #

AI 编程助手。

功能:

  • 代码补全
  • 解释代码
  • 生成测试
  • Code Review

使用:

# 安装 VS Code 插件
# 或使用 GitHub CLI
gh copilot explain "这段代码做了什么"
gh copilot suggest "写一个排序函数"

6.6 代码搜索 #

高级搜索语法:

# 搜索代码
filename:package.json lodash
 
# 搜索仓库
stars:>1000 language:JavaScript
 
# 搜索 Issue
is:issue is:open label:bug
 
# 搜索 PR
is:pr is:merged author:username
 
# 组合搜索
repo:facebook/react is:issue is:open comments:>10

搜索快捷键:

  • / - 聚焦搜索框
  • t - 文件搜索
  • s - 聚焦搜索框

七、实战场景 #

场景 1:开源项目贡献流程 #

# 1. Fork 项目
# 在 GitHub 页面点击 Fork
 
# 2. 克隆 Fork 的仓库
git clone git@github.com:your-username/project.git
cd project
 
# 3. 添加上游仓库
git remote add upstream git@github.com:original-owner/project.git
 
# 4. 同步上游代码
git fetch upstream
git checkout main
git merge upstream/main
 
# 5. 创建功能分支
git checkout -b fix/issue-123
 
# 6. 修改代码
# ... 编辑文件 ...
 
# 7. 提交
git add .
git commit -m "fix: 解决问题 #123"
 
# 8. 推送到 Fork
git push origin fix/issue-123
 
# 9. 创建 PR
gh pr create --title "fix: 解决问题" --body "关闭 #123"
 
# 10. 保持分支更新
git fetch upstream
git rebase upstream/main
git push origin fix/issue-123 --force

场景 2:团队协作工作流 #

Git Flow 工作流:

main (生产分支)
  └── develop (开发分支)
        ├── feature/xxx (功能分支)
        ├── feature/yyy
        └── release/1.0.0 (发布分支)
              └── hotfix/xxx (紧急修复)

GitHub Flow(简化版):

main (主分支)
  ├── feature/xxx
  └── fix/yyy

操作流程:

# 1. 从 main 创建功能分支
git checkout main
git pull
git checkout -b feature/user-auth
 
# 2. 开发并提交
git add .
git commit -m "feat: add user auth"
git push origin feature/user-auth
 
# 3. 创建 PR
gh pr create
 
# 4. Code Review
# 在 GitHub 页面审查
 
# 5. 合并
# Squash and merge
 
# 6. 删除分支
git branch -d feature/user-auth
git push origin --delete feature/user-auth

场景 3:使用 GitHub CLI 提高效率 #

# 查看仓库信息
gh repo view
 
# 查看我的 PR
gh pr list --author @me
 
# 查看需要审查的 PR
gh pr list --search "review-requested:@me"
 
# 查看某个 PR 详情
gh pr view 123
 
# 检出 PR 到本地
gh pr checkout 123
 
# 在浏览器打开
gh pr view 123 --web
 
# 快速添加评论
gh pr comment 123 --body "LGTM!"
 
# 批准 PR
gh pr review 123 --approve --body "Nice work!"
 
# 合并 PR
gh pr merge 123 --squash
 
# 查看 Issue
gh issue list --label bug
 
# 创建 Issue
gh issue create --title "Bug" --body "描述"
 
# 关闭 Issue
gh issue close 123
 
# 查看 Actions 运行状态
gh run list
gh run view
 
# 监听运行日志
gh run watch
 
# 查看工作流
gh workflow list
gh workflow view ci.yml
 
# 手动触发工作流
gh workflow run ci.yml

场景 4:自动化发布流程 #

使用 semantic-release 自动发布:

# .github/workflows/release.yml
name: Release
 
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
 
jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          token: ${{ secrets.GITHUB_TOKEN }}
          
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
          
      - run: npm ci
      - run: npm run build
      - run: npm test
      
      - name: Release
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
        run: npx semantic-release

package.json 配置:

{
  "name": "my-package",
  "version": "0.0.0-development",
  "scripts": {
    "semantic-release": "semantic-release"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/username/my-package.git"
  }
}

八、常见问题 #

Q1: 如何撤销已推送的 Commit? #

# 方法一:revert(推荐,安全)
git revert <commit-hash>
git push
 
# 方法二:reset(危险,会丢失提交)
git reset --hard <commit-hash>
git push --force
 
# 方法三:交互式 rebase
git rebase -i HEAD~3
# 把要删除的 commit 标记为 drop
git push --force

Q2: 如何解决合并冲突? #

# 1. 拉取最新代码
git fetch origin
git merge origin/main
 
# 2. 查看冲突文件
git status
 
# 3. 手动解决冲突
# 打开冲突文件,找到 <<<<<<< HEAD 标记
# 选择要保留的代码,删除冲突标记
 
# 4. 标记为已解决
git add <resolved-file>
 
# 5. 完成合并
git commit
# 或继续 rebase
git rebase --continue

冲突标记说明:

<<<<<<< HEAD
const name = 'current';  // 当前分支的代码
=======
const name = 'incoming'; // 要合并进来的代码
>>>>>>> feature-branch

Q3: 如何修改已推送的 Commit 信息? #

# 修改最近一次 commit
git commit --amend -m "新的提交信息"
git push --force
 
# 修改历史 commit(交互式 rebase)
git rebase -i HEAD~3
# 把 pick 改为 reword
# 保存后会打开编辑器修改信息
git push --force

Q4: 如何恢复已删除的分支? #

# 查找已删除分支的 commit
git reflog
 
# 找到分支删除前的 commit hash
# 恢复分支
git checkout -b <branch-name> <commit-hash>
 
# 或者使用 GitHub CLI
gh api repos/{owner}/{repo}/branches/{branch}

Q5: 如何清理已合并的分支? #

# 删除本地已合并的分支
git branch --merged main | grep -v "^\*\|main" | xargs git branch -d
 
# 删除远程已合并的分支
git branch -r --merged origin/main | grep -v "main" | sed 's/origin\//:/' | xargs git push
 
# 使用 GitHub CLI
gh pr list --state merged --json headRefName --jq '.[].headRefName' | \
  xargs -I {} git push origin --delete {}

Q6: 如何处理大文件? #

# 使用 Git LFS
git lfs install
git lfs track "*.psd"
git lfs track "*.mp4"
git add .gitattributes
git commit -m "chore: setup git lfs"
git push

Q7: 如何更改仓库的默认分支? #

  1. 进入仓库 → SettingsDefault branch
  2. 点击切换按钮
  3. 选择新分支
  4. 点击 Update

命令行:

# 重命名分支
git branch -m main new-default
git push origin -u new-default
git push origin --delete main
 
# 然后在 GitHub 设置中更改默认分支

Q8: 如何处理敏感信息泄露? #

如果只是提交了敏感信息(未推送):

# 从暂存区移除
git reset HEAD <file>
 
# 从历史中移除
git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch path/to/sensitive-file" \
  --prune-empty --tag-name-filter cat -- --all

如果已推送:

  1. 立即更改泄露的密钥/密码
  2. 联系 GitHub Support 请求删除敏感信息
  3. 使用 BFG Repo-Cleaner 清理历史:
# 安装 BFG
brew install bfg
 
# 删除敏感文件
bfg --delete-files sensitive-file.txt
git reflog expire --expire=now --all
git gc --prune=now --aggressive
git push --force

九、命令速查表 #

Git 基础命令 #

命令 说明
git init 初始化仓库
git clone <url> 克隆仓库
git status 查看状态
git add <file> 添加文件
git add . 添加所有文件
git commit -m "msg" 提交
git push 推送
git pull 拉取
git fetch 获取远程更新
git branch 查看分支
git branch <name> 创建分支
git checkout <branch> 切换分支
git checkout -b <branch> 创建并切换分支
git merge <branch> 合并分支
git rebase <branch> 变基
git log 查看日志
git diff 查看差异
git stash 暂存更改
git stash pop 恢复暂存
git reset --hard 重置到上一次提交
git revert <commit> 撤销提交

GitHub CLI 命令 #

命令 说明
gh auth login 登录
gh auth status 查看登录状态
gh repo create 创建仓库
gh repo clone 克隆仓库
gh repo view 查看仓库
gh issue create 创建 Issue
gh issue list 列出 Issue
gh issue view <number> 查看 Issue
gh issue close <number> 关闭 Issue
gh pr create 创建 PR
gh pr list 列出 PR
gh pr view <number> 查看 PR
gh pr checkout <number> 检出 PR
gh pr merge <number> 合并 PR
gh pr review <number> 审查 PR
gh run list 列出运行
gh run view 查看运行
gh workflow list 列出工作流
gh workflow run 触发工作流
gh release create 创建发布
gh browse 在浏览器打开

Issue/PR 快捷键 #

快捷键 说明
c 创建 Issue
a 添加 assignee
l 添加 label
m 设置 milestone
p 设置 project
/ 聚焦搜索框
? 显示快捷键帮助

附录:推荐资源 #

资源 链接 说明
GitHub 官方文档 docs.github.com 权威文档
GitHub Skills skills.github.com 交互式学习
GitHub CLI 手册 cli.github.com/manual CLI 文档
GitHub Actions 市场 github.com/marketplace Actions 模板
Pro Git 书籍 git-scm.com/book Git 权威书籍
Conventional Commits conventionalcommits.org 提交规范
Semantic Release semantic-release.gitbook.io 自动发布

最后更新:2026-03-29