GitHub使用手册-从入门到精通

一、Git 与 GitHub 的关系

很多人把 Git 和 GitHub 混为一谈,但实际上它们是两个不同的东西:

概念 说明
Git 分布式版本控制系统,安装在本地,用于跟踪代码变更
GitHub 基于 Git 的代码托管平台(云端),提供协作功能

简单理解:Git 是工具,GitHub 是用这个工具的网站。类似的平台还有 GitLab、Gitee(码云)等。


二、安装 Git

Windows

下载安装包:https://git-scm.com/download/win

安装时关键选项:

  • 选择编辑器:推荐选 VS Code 或 Nano
  • PATH 环境:选 “Git from the command line and also from 3rd-party software”
  • 换行符转换:选 “Checkout Windows-style, commit Unix-style line endings”

安装完成后验证:

1
2
git --version
# 输出示例: git version 2.45.0.windows.1

首次配置

1
2
3
4
5
6
7
8
9
# 配置用户名和邮箱(必须,会记录在每次 commit 中)
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱@example.com"

# 可选:配置默认分支名
git config --global init.defaultBranch main

# 查看配置
git config --list

注意--global 表示全局配置,对所有仓库生效。去掉则仅对当前仓库生效。


三、Git 核心概念

工作区域

1
2
3
4
5
6
7
8
9
10
工作目录 (Working Directory)
│ git add

暂存区 (Staging Area / Index)
│ git commit

本地仓库 (Local Repository)
│ git push

远程仓库 (Remote Repository)

文件状态

状态 说明
Untracked 新文件,未被 Git 跟踪
Modified 已跟踪的文件被修改了
Staged 修改已加入暂存区,准备提交
Committed 已提交到本地仓库

查看文件状态:

1
2
git status              # 查看完整状态
git status -s # 简洁模式(??=未跟踪, M=已修改, A=已暂存)

四、创建仓库

方式一:本地创建后推送到 GitHub

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1. 初始化本地仓库
mkdir my-project
cd my-project
git init

# 2. 创建文件并提交
echo "# My Project" > README.md
git add README.md
git commit -m "first commit"

# 3. 关联远程仓库(先在 GitHub 上创建一个空仓库)
git remote add origin https://github.com/你的用户名/my-project.git

# 4. 推送到远程
git branch -M main # 确保分支名为 main
git push -u origin main # -u 设置上游分支,之后可直接 git push

方式二:从 GitHub 克隆已有仓库

1
2
3
4
5
6
7
8
# HTTPS 方式(推荐新手)
git clone https://github.com/用户名/仓库名.git

# SSH 方式(需先配置 SSH Key,更安全)
git clone git@github.com:用户名/仓库名.git

# 克隆指定分支
git clone -b 分支名 https://github.com/用户名/仓库名.git

五、Git 核心命令详解

5.1 git add —— 添加到暂存区

1
2
3
4
git add 文件名            # 添加指定文件
git add . # 添加当前目录所有变更
git add -A # 添加所有变更(包括删除)
git add -p # 交互式选择要暂存的内容(高级用法)

5.2 git commit —— 提交到本地仓库

1
2
3
git commit -m "提交信息"                        # 提交并附信息
git commit -am "提交信息" # 跳过 add,直接提交已跟踪文件的修改
git commit --amend -m "新的提交信息" # 修改上一次提交(未push前)

提交信息规范(推荐)

1
2
3
4
5
<type>: <subject>

<body>

<footer>

常用 type:

Type 说明 示例
feat 新功能 feat: 添加用户登录功能
fix 修复Bug fix: 修复登录页密码校验问题
docs 修改文档 docs: 更新 README 安装说明
style 格式调整(不影响代码逻辑) style: 统一缩进为 4 空格
refactor 重构 refactor: 提取公共校验逻辑
perf 性能优化 perf: 优化列表渲染性能
test 测试相关 test: 添加登录模块单元测试
chore 构建/工具变更 chore: 升级依赖版本

5.3 git push —— 推送到远程仓库

1
2
3
4
5
git push                        # 推送到默认远程仓库的当前分支
git push origin main # 推送到 origin 的 main 分支
git push -u origin feature-xxx # 首次推送新分支并设置上游
git push --force # 强制推送(⚠️ 危险操作,会覆盖远程)
git push --force-with-lease # 更安全的强制推送(如果远程有别人提交会拒绝)

⚠️ 不要随意使用 --force,尤其在公共分支上,会覆盖别人的提交。

5.4 git pull —— 拉取远程更新

1
2
3
git pull                        # 拉取并合并(= fetch + merge)
git pull --rebase # 拉取并变基(= fetch + rebase,提交历史更线性)
git fetch # 只拉取,不合并(安全,可先查看再决定)

pull vs fetch

1
2
3
4
# 安全做法:先 fetch 查看,再决定合并方式
git fetch origin
git log origin/main --oneline # 查看远程有什么新提交
git merge origin/main # 确认无误后再合并

5.5 git branch —— 分支管理

1
2
3
4
5
6
git branch                      # 查看本地分支
git branch -a # 查看所有分支(包括远程)
git branch 分支名 # 创建分支
git branch -d 分支名 # 删除分支(已合并)
git branch -D 分支名 # 强制删除分支(未合并也删)
git branch -m 旧名称 新名称 # 重命名分支

5.6 git checkout / git switch —— 切换分支

1
2
3
4
5
6
7
8
# Git 2.23+ 推荐使用 switch(更明确)
git switch main # 切换到 main 分支
git switch -c 新分支名 # 创建并切换到新分支

# 传统语法
git checkout main # 切换分支
git checkout -b 新分支名 # 创建并切换
git checkout -- 文件名 # 丢弃工作区改动(⚠️ 不可恢复)

5.7 git merge —— 合并分支

1
2
3
4
5
6
7
# 将 feature 分支合并到 main
git switch main
git merge feature

# 合并时可能产生冲突,解决后:
git add .
git commit -m "merge: 合并 feature 分支"

5.8 git rebase —— 变基

1
2
3
4
5
# 将当前分支变基到 main 的最新提交之上
git rebase main

# 交互式变基(合并/修改/删除历史提交)
git rebase -i HEAD~3 # 对最近 3 次提交进行交互式操作
操作 说明 使用场景
pick 保留该提交 默认
squash 合并到上一个提交 整理多个小提交为一个
reword 修改提交信息 提交信息写错了
drop 删除该提交 某次提交不需要了

5.9 git log —— 查看提交历史

1
2
3
4
5
6
git log                         # 完整历史
git log --oneline # 一行显示(简洁)
git log --oneline --graph --all # 图形化显示所有分支
git log --author="用户名" # 按作者筛选
git log --since="2026-01-01" # 按时间筛选
git log -p 文件名 # 查看某文件的变更历史

5.10 撤销操作速查

场景 命令
撤销工作区的修改 git checkout -- 文件名git restore 文件名
撤销暂存区的文件 git reset HEAD 文件名git restore --staged 文件名
修改最后一次提交 git commit --amend
回退到某个历史版本(保留修改) git reset --soft HEAD~1
回退到某个历史版本(保留工作区) git reset --mixed HEAD~1
回退到某个历史版本(全部丢弃) git reset --hard HEAD~1 ⚠️
撤销已推送的提交 git revert 提交哈希(安全,生成新的反向提交)

reset --hard 是不可逆操作,回退前请确认。


六、远程仓库管理

1
2
3
4
5
git remote -v                           # 查看所有远程仓库
git remote add 名称 仓库URL # 添加远程仓库
git remote remove 名称 # 移除远程仓库
git remote rename 旧名称 新名称 # 重命名远程仓库
git remote set-url 名称 新URL # 修改远程仓库地址

多远程仓库场景

1
2
3
4
5
# 同时推送到 GitHub 和 Gitee
git remote add github https://github.com/用户名/仓库.git
git remote add gitee https://gitee.com/用户名/仓库.git
git push github main
git push gitee main

七、GitHub 核心功能

7.1 SSH Key 配置(推荐)

使用 SSH 可以免密推送,比 HTTPS 更安全方便。

1
2
3
4
5
6
7
8
9
10
11
12
# 1. 生成 SSH Key(一路回车)
ssh-keygen -t ed25519 -C "你的邮箱@example.com"

# 2. 查看公钥
cat ~/.ssh/id_ed25519.pub

# 3. 将公钥内容粘贴到 GitHub
# Settings → SSH and GPG keys → New SSH key

# 4. 测试连接
ssh -T git@github.com
# 成功输出: Hi 用户名! You've successfully authenticated...

如果系统不支持 ed25519,可以用 ssh-keygen -t rsa -b 4096 -C "你的邮箱"

7.2 Fork —— 复刻仓库

Fork 操作在 GitHub 网页上完成,点击仓库右上角的 Fork 按钮即可。

适用场景:

  • 想为别人的开源项目贡献代码
  • 想在别人的项目基础上做自己的修改

Fork 后的同步流程

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1. 克隆自己 fork 的仓库
git clone https://github.com/你的用户名/仓库名.git
cd 仓库名

# 2. 添加原始仓库为 upstream
git remote add upstream https://github.com/原作者/仓库名.git

# 3. 拉取原仓库更新
git fetch upstream
git merge upstream/main

# 4. 推送到自己的 fork
git push origin main

7.3 Issue —— 问题跟踪

Issue 用于报告 Bug、提出功能建议、讨论问题。

写一个好的 Issue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
## 问题描述
简要描述你遇到的问题

## 复现步骤
1. 打开页面 xxx
2. 点击 xxx 按钮
3. 出现 xxx 错误

## 期望行为
应该发生什么

## 实际行为
实际发生了什么

## 环境信息
- 操作系统: Windows 11
- 浏览器: Chrome 120
- 版本: v1.2.3

## 截图/日志
(粘贴相关截图或错误日志)

Issue 关联

  • 在 Issue 中使用 #编号 引用其他 Issue/PR
  • 在 commit 中使用 fixes #编号closes #编号 可自动关闭 Issue

7.4 Pull Request (PR) —— 合并请求

PR 是 GitHub 协作的核心。基本流程:

1
2
3
4
5
6
7
8
9
1. Fork 原仓库(或创建分支)

2. 在自己的分支上修改

3. 发起 Pull Request

4. 代码审查 (Code Review)

5. 讨论修改 → 通过 → 合并

PR 最佳实践

  • 一个 PR 只做一件事
  • PR 标题简洁明了
  • PR 描述中说明:做了什么、为什么做、怎么测试
  • 关联相关 Issue:Closes #123
  • 保持 PR 体积小(< 500 行变更,方便审查)

7.5 GitHub Actions —— 自动化工作流

.github/workflows/ 目录下创建 YAML 文件即可定义自动化流程。

示例:自动部署 Hexo 博客

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
name: Deploy Blog

on:
push:
branches: [ main ]

jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm install
- run: npm run build
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public

常用 Actions 场景

  • 代码推送后自动运行测试
  • PR 提交时自动进行代码检查(Lint)
  • 定时任务
  • 自动构建部署

7.6 GitHub Pages —— 免费静态网站托管

GitHub 为每个用户/组织提供免费静态网站托管。

快速上手

  1. 创建仓库 用户名.github.io
  2. 推送 HTML 文件
  3. 访问 https://用户名.github.io

Settings → Pages → Branch 选择分支 → Save,即可启用。

7.7 Gist —— 代码片段分享

https://gist.github.com

适用于分享单文件代码片段、配置示例等。支持公开/私有两种模式。

7.8 GitHub 个人主页美化

创建个人 README:创建一个和你用户名同名的仓库,其中的 README.md 会展示在你的个人主页上。

1
2
3
4
5
6
### Hi there 👋

- 🔭 我目前正在做...
- 🌱 我正在学习...
- 👯 我希望合作...
- 📫 联系方式: ...

八、分支协作策略

8.1 Git Flow(经典分支模型)

1
2
3
4
5
6
7
8
9
main        ●─────●─────────────────●────────
│ │ │
develop ●─────●────●────●───────●────────
│ │ │
feature/* ●──────────● │

release/* ●────●───────────

hotfix/* ●──────────
分支 用途
main 生产环境代码,只接受 merge
develop 开发主线
feature/* 新功能开发
release/* 发布前准备
hotfix/* 紧急修复

8.2 GitHub Flow(简化版)

1
2
3
4
main ──●─────────────●─────────────●──
│ │ │
└──feature-A──┘ │
└──feature-B──┘

规则:

  1. main 分支始终可部署
  2. 新功能从 main 创建分支
  3. 完成后发起 PR 合并回 main
  4. 合并后立即部署

个人项目推荐使用 GitHub Flow,团队项目视规模选择。


九、常见场景操作

场景1:代码写错分支了

1
2
3
4
5
6
7
8
# 1. 在当前分支保存修改
git stash

# 2. 切换到正确分支
git switch 正确分支名

# 3. 恢复修改
git stash pop

场景2:提交后发现漏了文件

1
2
3
# 添加遗漏的文件,然后修改上一次提交
git add 遗漏的文件
git commit --amend --no-edit # --no-edit 保持原提交信息

场景3:需要回退已推送的提交

1
2
3
4
5
6
# 使用 revert(安全,不破坏历史)
git revert 提交的哈希值
git push

# 如果需要回退多个,逐个 revert(从最新到最旧)
git revert HEAD~2..HEAD

场景4:合并多个小提交

1
2
3
4
5
6
7
8
9
# 交互式变基最近 3 个提交
git rebase -i HEAD~3

# 在编辑器中,将第2、3行的 pick 改为 squash(或 s)
# pick abc1234 第一个提交
# squash def5678 第二个提交
# squash ghi9012 第三个提交

# 保存后编辑合并后的提交信息

场景5:解决合并冲突

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. 尝试合并
git merge feature-branch

# 2. 出现冲突提示:
# CONFLICT (content): Merge conflict in 文件名

# 3. 打开冲突文件,会看到:
# <<<<<<< HEAD
# (当前分支的内容)
# =======
# (要合并分支的内容)
# >>>>>>> feature-branch

# 4. 手动编辑文件,删除标记,保留需要的内容

# 5. 标记为已解决
git add 文件名

# 6. 完成合并
git commit -m "merge: 解决冲突"

# 7. 如果搞不定,放弃合并
git merge --abort

场景6:Git Stash —— 临时保存工作现场

1
2
3
4
5
6
7
git stash                    # 暂存当前修改
git stash save "描述信息" # 带描述的暂存
git stash list # 查看暂存列表
git stash pop # 恢复最近一次暂存并删除
git stash apply stash@{0} # 恢复指定暂存(不删除)
git stash drop stash@{0} # 删除指定暂存
git stash clear # 清空所有暂存

十、.gitignore 文件

在项目根目录创建 .gitignore 文件,让 Git 忽略不需要跟踪的文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 依赖
node_modules/
vendor/

# 编译产物
dist/
build/
*.exe

# 环境配置
.env
.env.local

# 操作系统
.DS_Store
Thumbs.db

# IDE
.vscode/
.idea/
*.swp
*.swo

# 日志
*.log

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

如果文件已经被 Git 跟踪,需要先 git rm --cached 文件名 再添加到 .gitignore


十一、Git 配置优化

常用别名

1
2
3
4
5
6
7
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.lg "log --oneline --graph --all"
git config --global alias.last "log -1 HEAD"
git config --global alias.unstage "reset HEAD --"

使用效果:

1
2
3
git st       # = git status
git co main # = git checkout main
git lg # = git log --oneline --graph --all

换行符处理

1
2
3
4
5
# Windows 上提交时自动将 CRLF 转为 LF
git config --global core.autocrlf true

# Mac/Linux 上
git config --global core.autocrlf input

十二、GitHub 常用技巧

Markdown 小技巧

1
2
3
4
5
6
7
8
9
10
11
12
13
<!-- 折叠区域 -->
<details>
<summary>点击展开更多内容</summary>
这里是被折叠的内容。
</details>

<!-- 任务列表 -->
- [x] 已完成的任务
- [ ] 待完成的任务

<!-- 代码高亮 -->
```python
print("Hello, World!")
列1 列2 列3
A B C
1
2
3
4
5

### 搜索技巧

在 GitHub 搜索框中使用高级语法:

language:python stars:>1000 # 搜索 Python 项目,超过1000星
user:N0orange # 搜索特定用户
org:github # 搜索特定组织
path:README.md # 按文件路径搜索
filename:.gitignore # 按文件名搜索
is:issue is:open label:bug # 搜索 Issue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

### GitHub CLI(gh)

GitHub 官方命令行工具,可直接在终端操作 Issues、PRs 等。

```bash
# 安装
winget install GitHub.cli # Windows
# 或下载: https://cli.github.com

# 登录
gh auth login

# 常用命令
gh repo create # 创建仓库
gh issue list # 查看 Issues
gh issue create # 创建 Issue
gh pr create # 创建 Pull Request
gh pr checkout 编号 # 在本地检出某个 PR
gh pr review # 审查 PR
gh release create # 创建 Release

十三、GitHub Web 端完整操作指南

很多操作不一定要用命令行——GitHub 网页版已经足够强大,甚至能替代大部分 Git 操作。以下按页面区域逐一说明。


13.1 顶部导航栏

登录后,页面顶部黑色导航栏(从左到右):

图标/文字 功能
☰ 三横线 侧边栏菜单(仓库列表、Issues、PRs 等快捷入口)
GitHub Logo 返回首页(Feed 动态流)
搜索框 全局搜索仓库、代码、Issues、用户
+ 加号 创建新仓库 / 导入仓库 / 新建 Organization / 新建 Gist
🔔 通知铃 Issue/PR 的 @提及、评论回复、审核请求等通知
头像 个人菜单(Your profile、Settings、Your repositories 等)

搜索框快捷键:在任意页面按 / 直接聚焦搜索框。


13.2 个人首页(Dashboard)

网址:https://github.com(登录后)

左侧:仓库列表(你 Star 过的、最近访问的)
中间:动态 Feed(你 Follow 的人/组织的活动)

Feed 内容理解

1
2
3
4
5
6
7
8
N0orange starred N0orange/N0orange.github.io
↑ 用户 ↑ 动作 ↑ 仓库

N0orange pushed to main in N0orange/N0orange.github.io
↑ 推送了代码到 main 分支

N0orange opened issue #3 in some/repo
↑ 在某仓库创建了新 Issue

13.3 仓库主页(Repository)

这是最常打交道的地方。假设进入 https://github.com/N0orange/N0orange.github.io

顶部标签栏

1
2
3
4
5
┌──────────────────────────────────────────────────────┐
│ < > Code │ Issues │ Pull requests │ Actions │
│ Projects │ Wiki │ Security │ Insights │
│ Settings │ │
└──────────────────────────────────────────────────────┘
标签页 用途
Code 浏览代码文件,查看提交历史,管理分支
Issues 问题讨论区(Bug 报告、功能建议)
Pull requests 合并请求管理,代码审查
Actions CI/CD 工作流查看与管理
Projects 看板式项目管理(类似 Trello)
Wiki 项目文档 Wiki
Security 安全漏洞告警、依赖扫描
Insights 仓库数据统计(贡献者、流量、活跃度)
Settings 仓库设置(权限、分支保护、Webhook 等)

Code 页面结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
┌──────────────────────────────────────────────┐
│ main ▼ │ ▸ 10 branches │ ▸ 6 tags │ ← 分支切换
│ │
│ N0orange 修复了登录页密码校验问题 │ ← 最新提交信息
│ abc1234 · 2 hours ago │
│ │
│ ┌──────────────────────────────────┐ │
│ │ 文件列表(可点击浏览) │ │
│ │ README.md │ │
│ │ src/ │ │
│ │ package.json │ │
│ │ ... │ │
│ └──────────────────────────────────┘ │
│ │
│ [ Add file ▼ ] [ < > Code ▼ ] 绿色按钮 │
└──────────────────────────────────────────────┘

右侧信息栏

区域 说明
About 仓库描述、网站链接、标签(Topics)
Star ⭐ 收藏仓库,类似点赞书签
Fork 🍴 复刻仓库到自己的账户
Watch 👁 关注仓库动态(Issue/PR/新版本通知)
Releases 版本发布列表
Contributors 贡献者头像列表
Languages 代码语言占比统计

13.4 在线浏览代码

文件浏览技巧

  • 点击文件名 → 打开文件查看内容
  • 点击文件夹名 → 进入子目录
  • 代码行号 → 点击行号可获取该行的永久链接
  • Blame 按钮 → 查看每一行代码是谁在什么时候写的

查看文件时的快捷键

在代码文件页面按 ? 可查看完整快捷键列表,常用:

快捷键 功能
t 快速搜索文件(在当前仓库中)
l 跳转到指定行号
w 切换分支/标签
y 将 URL 转换为永久链接(锁定当前 commit)
b 查看 Blame(每行的提交者)
. 在浏览器中打开 VS Code Web 编辑器(超实用!)
Ctrl+K 在编辑器中调出命令面板

. 键 —— GitHub 内置编辑器

在任意仓库页面按 . 键,会打开一个完整的 VS Code Web 编辑环境,可以:

  • 浏览和编辑所有文件
  • 使用终端
  • 安装扩展
  • 直接提交修改(自动走 Git 流程)

这是 Web 端最强大的功能之一,相当于浏览器里的 VS Code。


13.5 Web 端创建和编辑文件

新建文件

  1. 进入仓库 → 点击 Add file ▼Create new file
  2. 在顶部输入文件路径(如 docs/guide.md,会自动创建文件夹)
  3. 在编辑区写内容
  4. 下方填写提交信息 → Commit new file

编辑已有文件

  1. 打开目标文件
  2. 点击右上角 ✏️ 铅笔图标(Edit this file)
  3. 编辑内容
  4. 提交

上传文件

  1. Add file ▼Upload files
  2. 拖拽文件或点击选择
  3. 填写提交信息 → Commit changes

这三种操作本质上都在执行 git commit,GitHub 会自动生成提交记录。


13.6 Web 端分支操作

切换分支

Code 页面左上角下拉框,显示当前分支名(如 main ▼),点击可切换或搜索分支。

创建分支

  1. 点击 main ▼ → 在搜索框输入新分支名
  2. 如果分支不存在,会显示 “Create branch: xxx from ‘main’” → 点击创建

比较分支差异

  • 直接访问 URL:https://github.com/用户名/仓库/compare/分支A...分支B
  • 或者在分支下拉框旁点击 “X branches”,进入分支列表页面

删除分支

  1. 进入仓库 → 点击 X branches(分支数量链接)
  2. 找到目标分支 → 点右侧 🗑 删除图标

13.7 Web 端创建和管理 Issue

创建 Issue

  1. 进入仓库 → Issues 标签 → 绿色 New issue 按钮
  2. 填写标题和描述
  3. 右侧可设置:
    • Assignees:指派负责人
    • Labels:标签(bug/enhancement/documentation 等)
    • Projects:关联项目看板
    • Milestone:关联里程碑
  4. 点击 Submit new issue

Issue 操作

操作 位置 效果
@提及 评论中输入 @用户名 通知该用户
引用 PR/Issue 输入 #编号 链接到其他 Issue/PR
引用 Commit 输入 commit hash 前 7 位 自动链接到该提交
关闭 Issue 底部 Close issue 按钮 关闭但可重开
锁定 右侧 Lock conversation 禁止新评论(限维护者)
转移 Issue 底部 Transfer issue 转移到其他仓库

Pin Issue(置顶)

在 Issue 列表页,点击 Issue 右下角 Pin issue 可将其固定在列表顶部(最多 3 个)。


13.8 Web 端发起 Pull Request

这是协作中最关键的操作,全部可在网页完成:

方式一:从分支创建 PR

  1. 推送你的分支到 GitHub
  2. 进入仓库主页,通常会看到黄色提示条:“xxx had recent pushes” → 点击 Compare & pull request
  3. 如果没看到提示条,手动操作:
    • 切换到你的分支
    • 点击 Contribute ▼Open pull request

方式二:从 Fork 创建 PR

  1. 在 Fork 的仓库中,点击 Contribute ▼Open pull request
  2. 选择合并方向(从你的 fork 的某分支 → 原仓库的某分支)
  3. 填写 PR 信息

PR 页面结构

创建 PR 时看到的页面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
┌─────────────────────────────────────────────────┐
│ base: main ← compare: feature-xxx │ ← 合并方向
│ Able to merge ✓ │ ← 有无冲突
│ │
│ [Title: 一句话描述这个 PR 做了什么] │
│ │
│ [Leave a comment (详细描述)] │
│ │
│ ┌──────────────────────────────────┐ │
│ │ 右侧面板: │ │
│ │ Reviewers: 请求审查人 │ │
│ │ Assignees: 指派负责人 │ │
│ │ Labels: 标签 │ │
│ │ Projects / Milestone │ │
│ └──────────────────────────────────┘ │
│ │
│ [ Create pull request ] 绿色按钮 │
└─────────────────────────────────────────────────┘

PR 创建后的页面

1
2
3
┌─────────────────────────────────────────────────┐
│ Conversation │ Commits │ Checks │ Files │
└─────────────────────────────────────────────────┘
子标签 内容
Conversation 讨论区,评论、Review 意见、合并操作
Commits 这个 PR 包含的所有提交列表
Checks CI/CD 检查结果(Actions 运行状态)
Files changed 代码变更对比,逐行审查

审查者视角(Review)

  1. 打开 PR → Files changed 标签
  2. 鼠标悬停在代码行号旁,出现 ➕ 蓝色加号
  3. 点击加号,输入审查意见
  4. 点击 Start a review(单条)或 Add review comment(多条)
  5. 全部审完后,右上角绿色 Review changes 按钮:
    • Comment:仅留言,不表态
    • Approve:批准合并
    • Request changes:要求修改后再看

合并 PR

PR 通过审查后,底部出现合并按钮:

合并方式 效果
Create a merge commit 保留所有分支提交,生成一个 merge commit
Squash and merge 所有提交压成一个,提交历史更干净
Rebase and merge 变基到目标分支,无额外 merge commit

选择哪种取决于团队规范。个人项目推荐 Squash,保持历史简洁。


13.9 Web 端解决冲突

当 PR 有冲突时,GitHub 会显示 “This branch has conflicts that must be resolved”

点击 Resolve conflicts 按钮,进入 Web 编辑器:

1
2
3
4
5
<<<<<<< feature-branch
你的修改内容
=======
main 分支上别人的修改
>>>>>>> main

直接在网页中编辑,删除冲突标记 <<<<<<< / ======= / >>>>>>>,保留正确内容 → 点击 Mark as resolvedCommit merge

Web 端只适合解决简单冲突。复杂冲突建议拉取到本地处理。


13.10 查看提交历史

Commits 页面

进入仓库 → 点击 Code 页面顶部 “🕐 X commits” 链接(时钟图标旁)。

每个提交展示的信息

1
2
3
4
5
6
7
8
┌──────────────────────────────────────────────┐
│ fix: 修复登录页密码校验问题 │ ← 提交信息
│ │
│ N0orange committed 2 hours ago │ ← 作者 + 时间
│ abc1234 ✓ Verified │ ← commit hash + 签名状态
│ │
│ [ 👀 ] [ 📋 ] [ <> ] │ ← 浏览/复制hash/查看代码
└──────────────────────────────────────────────┘

点击任意提交 → 进入详细页面,可以看到该次提交改动了哪些文件的哪些行。

对比两个提交

直接在 URL 中输入:https://github.com/用户名/仓库/compare/提交A...提交B


13.11 Releases(版本发布)

用于发布正式版本,附带 Release Notes。

创建 Release

  1. 仓库 → Releases(右侧栏)→ Create a new release
  2. Choose a tag:输入版本号(如 v1.0.0)→ 点击 Create new tag
  3. Release title:发布标题
  4. Describe this release:更新日志(自动生成或手动写)
  5. 可选:上传二进制文件(.exe/.zip 等附件)
  6. 勾选 Set as the latest release
  7. 点击 Publish release

发布后,仓库首页右侧会显示最新 Release 信息。其他用户可以通过 git pull 或下载附件获取。


13.12 Settings(仓库设置)

仓库设置项很多,以下是常用部分:

General(通用设置)

设置项 说明
Default branch 修改默认分支名(如 main → master)
Social preview 设置分享链接时的预览图
Features → Issues/Wiki/Projects 开关各功能模块
Pull Requests 设置合并方式,是否允许 squash/rebase
Automatically delete head branches 合并 PR 后自动删除源分支

Collaborators(协作者)

Settings → Collaborators → Add people

  • 输入用户名/邮箱,添加为协作者
  • 协作者拥有直接 push 权限(不需要 Fork)

Branches(分支保护)

Settings → Branches → Add branch protection rule

保护规则 效果
Require a pull request before merging 禁止直接 push,必须走 PR
Require approvals PR 需要 N 个人审批才能合并
Dismiss stale approvals 有新提交时,旧的审批失效
Require status checks to pass CI 必须通过才能合并
Require conversation resolution 所有评论对话必须解决后才能合并
Do not allow bypassing 管理员也不能跳过以上限制

推荐配置(个人项目):至少开启 “Require a pull request before merging”。

Deploy Keys(部署密钥)

Settings → Deploy keys → Add deploy key

  • 用于给 CI/CD 服务器提供仓库访问权限
  • 与个人 SSH Key 分开,更安全
  • 可设置为只读或读写

13.13 个人 Settings(账号设置)

点击右上角头像 → Settings,进入个人设置页面。

重要设置项速览

左侧菜单 关键操作
Profile 修改头像、Bio、网址、社媒链接
Account 修改用户名、删除账号
Appearance 主题切换(暗色/亮色)、标签页宽度
Accessibility 无障碍设置,键盘快捷键
Notifications 通知方式、订阅管理
Billing and plans 查看套餐(免费版足够个人使用)
Emails 添加邮箱、设置主邮箱(决定 commits 归属)
Password and authentication 修改密码、开启 2FA 双因素认证
SSH and GPG keys 管理 SSH 公钥(用于免密推送)、GPG 签名密钥
Repositories 仓库列表管理
Organizations 组织管理
Applications 已授权的第三方应用管理
Developer settings Personal Access Token、OAuth Apps、GitHub Apps

关键操作详解

1. 设置 commit 邮箱(Emails)

GitHub 通过邮箱关联你的 commit。在这里添加你在 git config user.email 中使用的邮箱,commit 才会显示你的头像。

勾选 “Keep my email addresses private” 可以使用 GitHub 提供的匿名邮箱(如 123456+N0orange@users.noreply.github.com)。

2. Personal Access Token(Developer settings)

适用于 HTTPS 推送或调用 GitHub API:

  • Fine-grained token(推荐):按仓库授权,设过期时间
  • Classic token:按 scope 授权

创建步骤:

  1. Developer settings → Personal access tokens → Tokens (classic) / Fine-grained tokens
  2. Generate new token
  3. 勾选需要的权限(repo / workflow / write:packages 等)
  4. 生成后立即复制保存,离开页面后不可再查看

3. 双因素认证(2FA)

Password and authentication → Enable two-factor authentication,强烈建议开启。


13.14 项目看板(Projects)

GitHub Projects 是内置的看板管理工具,适合追踪任务进度。

创建 Project

  1. 仓库 → Projects 标签 → New project
  2. 或从个人主页 Projects 标签创建

视图类型

视图 说明
Board(看板) 卡片+列形式,类似 Trello(Todo / In Progress / Done)
Table(表格) 表格视图,方便批量编辑
Roadmap(路线图) 按日期排列,展示项目时间线

卡片操作

  • 每张卡片可设置:Title、Assignees、Status、Labels、Start date、End date
  • 拖拽卡片到不同列(如从 Todo 拖到 Done)
  • 卡片可以关联 Issue/PR → 自动显示进度

13.15 快捷键速查(Web 端)

在 GitHub 任意页面按 ? 查看完整快捷键。以下是最常用的:

快捷键 功能
? 显示快捷键列表
/ 聚焦搜索框
t 在当前仓库搜索文件
l 跳转到指定行号
w 切换分支/标签
y 永久链接(锁定当前 commit 的 URL)
b 查看 Blame
. 打开 VS Code Web 编辑器
s/ 聚焦搜索框(仓库页)
g i 跳转到 Issues
g p 跳转到 Pull Requests
g c 跳转到 Code
g a 跳转到 Actions
g n 跳转到通知
g d 跳转到 Dashboard 首页
Ctrl+K 命令面板(在 . 编辑器中)
Esc 在文件搜索中取消焦点

13.16 Web 端 vs CLI 对照

很多 CLI 操作在 Web 端有对应方式:

想做的事情 CLI Web 端
创建仓库 gh repo create 右上角 + → New repository
浏览代码 ls / cat 文件列表点击
编辑文件 本地编辑器修改 → git commit 铅笔图标 → 在线编辑 → Commit
创建分支 git switch -c xxx 分支下拉框 → 输入新分支名
提交代码 git add . && git commit -m "..." 上传/编辑文件 → 填写 commit message
查看历史 git log Commits 页面
创建 Issue gh issue create Issues → New issue
发起 PR gh pr create Pull requests → New PR
审查代码 本地查看 diff Files changed → 逐行评论
合并 PR git merge feature Merge pull request 按钮
解决冲突 git merge → 手动编辑 Resolve conflicts 按钮
发布版本 gh release create Releases → Create new release
Fork 仓库 gh repo fork 仓库名 右上角 Fork 按钮

十四、安全注意事项

注意事项 说明
不要提交密钥 API Key、Token、密码等绝对不能提交到仓库
使用 .gitignore 忽略 .env、密钥文件、编译产物
定期检查泄露 使用 git log -p 检查是否有敏感信息误提交
开启 2FA GitHub Settings → Password and authentication → 启用双因素认证
Branch Protection 对 main 分支设置保护规则,禁止直接 push
已泄露处理 如果密钥已提交,立即在平台重置密钥,然后 git filter-branch 清理历史

十五、学习路径建议

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
第一阶段(1-2天):基础操作
├── git init / clone / add / commit / push / pull
├── 理解工作区、暂存区、仓库区
└── 单人项目基本流程

第二阶段(3-5天):分支操作
├── branch / switch / merge
├── 解决冲突
└── stash 临时保存

第三阶段(1-2周):协作进阶
├── Pull Request 流程
├── Code Review
├── rebase 整理提交
└── Fork + upstream 同步

第四阶段(持续):工程化
├── GitHub Actions 自动化
├── Git Flow / GitHub Flow
├── git bisect 二分查找 Bug
└── git reflog 恢复误删

十六、速查表(Cheat Sheet)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# ─── 基础 ───
git init # 初始化仓库
git clone <url> # 克隆仓库
git status # 查看状态
git add <file> # 添加到暂存区
git commit -m "msg" # 提交
git push # 推送
git pull # 拉取

# ─── 分支 ───
git branch # 查看分支
git branch <name> # 创建分支
git switch <name> # 切换分支
git switch -c <name> # 创建并切换
git merge <branch> # 合并分支
git branch -d <name> # 删除分支

# ─── 历史 ───
git log --oneline # 简洁历史
git log --graph --all # 图形化历史
git diff # 查看未暂存的改动
git diff --staged # 查看已暂存的改动

# ─── 撤销 ───
git restore <file> # 丢弃工作区改动
git restore --staged <file> # 取消暂存
git reset --soft HEAD~1 # 撤销提交(保留改动)
git revert <commit> # 安全回退

# ─── 暂存 ───
git stash # 暂存当前改动
git stash pop # 恢复最近暂存
git stash list # 查看暂存列表

# ─── 远程 ───
git remote -v # 查看远程仓库
git remote add <name> <url> # 添加远程仓库
git fetch <remote> # 拉取不合并

参考资源