Git 版本控制
这一章解决什么问题
帮助你掌握 Zed 内置 Git 面板的完整使用流程,包括查看改动、暂存、diff、commit 等操作,并了解什么时候用 Zed 的 Git 功能,什么时候用命令行。
资料来源
- Zed Git 功能页面 — 官方 Git 功能介绍
- Zed Git 文档 — 官方 Git 使用文档
- Zed Git 博客文章 — Git 功能发布说明
访问时间:2025-06-09
你会在什么时候用到它
- 完成代码修改后需要提交时
- 想查看自己改了哪些文件时
- 需要撤销错误修改时
- 需要处理合并冲突时
认识 Git 面板
Zed 的 Git 面板是内置的版本控制界面,无需安装任何扩展。
打开 Git 面板
| 方式 | 操作 |
|---|---|
| 快捷键 | Ctrl+Shift+G |
| 命令面板 | Ctrl+Shift+P → git panel: toggle focus |
| 状态栏 | 点击状态栏的分支名 |
Git 面板界面
Git 面板默认位于左侧,显示以下信息:
- 当前分支名:如
main、feature-branch - 改动文件列表:显示 modified、added、deleted 状态的文件
- Commit 输入框:编写 commit message
- Commit 按钮:执行提交
截图替换建议:在项目中修改几个文件后打开 Git 面板,截图保存为
docs/public/images/screenshots/zed-git-panel.png。
核心概念
在深入操作前,先理解几个核心概念:
Working Tree(工作区)
你当前编辑的文件就是工作区。当你修改文件时,这些改动首先出现在工作区中。
Staging Area(暂存区)
暂存区是你准备提交的改动的"等待区"。你可以:
- 将工作区的改动添加到暂存区(stage)
- 从暂存区移除(unstage)
- 暂存区的内容最终会被 commit
Modified / Staged / Unstaged
| 状态 | 说明 | 图标 |
|---|---|---|
| Modified | 文件被修改但未暂存 | M(黄色) |
| Staged | 修改已添加到暂存区 | M(绿色) |
| Added | 新文件已暂存 | A(绿色) |
| Deleted | 文件被删除 | D(红色) |
| Untracked | 新文件未被 Git 跟踪 | ?(灰色) |
状态流转
修改文件 → Modified → Stage → Staged → Commit → 干净状态
查看 Diff(差异对比)
在提交前,你应该先查看自己改了什么。
查看单个文件的 Diff
- 在 Git 面板中点击一个 modified 文件
- 编辑器会显示 diff 视图:
- 红色区域(
-):删除的代码 - 绿色区域(
+):新增的代码
- 红色区域(
Diff 视图操作
| 操作 | 说明 |
|---|---|
点击 + 号 | 暂存该块改动(stage hunk) |
点击 - 号 | 取消暂存该块改动(unstage hunk) |
| 编辑 diff 内容 | Zed 的 diff 是可编辑的,可以直接在 diff 中修改代码 |
切换 Diff 显示模式
Zed 支持两种 diff 显示模式:
- Unified(统一视图):删除和新增在同一区域显示
- Split(分栏视图):左边显示旧版本,右边显示新版本
可以在设置中切换:
{
"diff_view_style": "unified"
}Word Diff 高亮
Zed 可以在 diff 中精确到单词级别的高亮,帮助你快速定位具体改动。
注意:具体界面按钮可能因版本而异,以你当前 Zed 版本的实际界面为准。
暂存改动(Stage)
暂存单个文件
在 Git 面板中:
- 将鼠标悬停在文件上
- 点击出现的 Stage 按钮(或
+图标) - 文件从 Modified 变为 Staged 状态
暂存部分改动(Stage Hunk)
如果你只想提交文件中的部分改动:
- 点击文件查看 diff
- 在 diff 中,点击你想暂存的改动块旁边的 Stage Hunk 按钮
- 只有该块被暂存,其他改动仍留在工作区
精确控制
Stage Hunk 是精细提交的关键。比如你在一个文件中同时做了重构和 bug 修复,可以用 Stage Hunk 分别提交,让 commit 历史更清晰。
暂存所有改动
在 Git 面板顶部,点击 Stage All 按钮,将所有 modified 文件一次性暂存。
取消暂存(Unstage)
- 点击 staged 文件旁边的 Unstage 按钮(或
-图标) - 或点击 Unstage All 取消所有暂存
编写 Commit Message
Commit 输入框
在 Git 面板底部有 commit message 输入框:
- 输入简洁明了的提交描述
- 按
Ctrl+Enter或点击 Commit 按钮提交
Commit Message 规范
良好的 commit message 应该:
<type>: <简短描述>
<详细描述(可选)>示例:
feat: 添加用户登录功能
- 实现 JWT token 验证
- 添加登录表单验证
- 处理登录失败错误提示常用类型:
| 类型 | 含义 |
|---|---|
feat | 新功能 |
fix | 修复 bug |
docs | 文档修改 |
style | 代码格式(不影响功能) |
refactor | 重构 |
test | 添加测试 |
chore | 构建/工具改动 |
AI 生成 Commit Message
Zed 支持用 AI 自动生成 commit message:
- 暂存你的改动
- 在 commit 输入框旁边,点击 AI 生成按钮
- Zed 会分析你的 diff 并生成建议的 commit message
- 可以编辑后使用
功能状态:此功能需要配置 AI 模型。详见 AI 辅助开发 章节。
提交(Commit)
基本提交流程
1. 修改代码 → 文件显示为 Modified
2. 查看 Diff → 确认改动正确
3. Stage 改动 → 文件变为 Staged
4. 写 Commit Message → 描述这次改动
5. 点击 Commit → 提交完成Commit 后操作
提交后,你可以:
- Push:
Ctrl+Shift+P→git push推送到远程 - 查看历史:Zed 的 commit log 功能(如果在你的版本中可用)
撤销改动
撤销未暂存的改动
在 Git 面板中:
- 右键点击 modified 文件
- 选择 Discard Changes
- 文件恢复到最后一次 commit 的状态
不可逆操作
Discard Changes 会永久丢失未暂存的改动,请确认后再执行!
撤销已暂存的改动
- 点击 staged 文件旁的 Unstage 按钮
- 文件回到 modified 状态
- 如果需要,再执行 Discard Changes
分支管理
查看当前分支
状态栏和 Git 面板顶部都显示当前分支名。
切换分支
Ctrl+Shift+P→git checkout- 或使用分支选择器(如果界面中有)
创建新分支
Ctrl+Shift+P→git branch- 输入新分支名
注意:分支管理的具体界面可能因版本而异。如果 Zed 的界面操作不方便,可以使用终端执行
git checkout -b <分支名>。
处理合并冲突
当合并或 rebase 产生冲突时,Zed 会显示冲突界面。
查看冲突
冲突文件在 Git 面板中标记为冲突状态,编辑器中会显示冲突标记:
<<<<<<< HEAD
console.log("本地代码");
=======
console.log("远程代码");
>>>>>>> feature-branch解决冲突
Zed 提供冲突解决界面:
点击冲突文件
每个冲突区域会显示选项:
- Accept Ours:保留本地代码
- Accept Theirs:保留远程代码
- Accept Both:保留双方代码
- 或手动编辑
解决所有冲突后,暂存文件并提交
放弃合并
如果冲突太多想放弃:
git merge --abort # 放弃合并
git rebase --abort # 放弃 rebaseZed Git 与命令行 Git 的配合
Zed 的 Git 面板适合日常操作,但某些场景建议用命令行:
✅ 适合用 Zed Git 面板
| 场景 | 原因 |
|---|---|
| 查看改动 | 可视化 diff 直观 |
| 逐行/逐块 stage | 界面操作更方便 |
| 写 commit message | 集成 AI 生成 |
| 快速 commit | 无需切换窗口 |
| 解决简单冲突 | 可视化选择 |
➡️ 建议用命令行 / 其他工具
| 场景 | 推荐工具 | 原因 |
|---|---|---|
| 复杂分支操作 | 命令行 git | 更灵活 |
| 查看详细历史 | 命令行 git log | 信息更全面 |
| 交互式 rebase | 命令行 git rebase -i | Zed 暂不支持 |
| 高级 Git 操作 | 命令行 / lazygit | 功能更完整 |
| 可视化分支图 | GitHub Desktop / SourceTree | 图形化历史 |
推荐组合
日常使用 Zed Git 面板处理提交流程,复杂操作配合命令行或 lazygit。
完整提交流程示例
┌──────────────────────────────────────────────────────┐
│ 1. 修改代码 │
│ → 文件显示为 Modified (黄色 M) │
├──────────────────────────────────────────────────────┤
│ 2. 查看 Diff │
│ → 点击文件,确认改动正确 │
├──────────────────────────────────────────────────────┤
│ 3. Stage 改动 │
│ → 点击 + 按钮(全部或部分) │
│ → 文件变为 Staged (绿色 M) │
├──────────────────────────────────────────────────────┤
│ 4. 写 Commit Message │
│ → 描述这次改动的目的 │
│ → 可选:用 AI 生成 │
├──────────────────────────────────────────────────────┤
│ 5. Commit │
│ → Ctrl+Enter 或点击 Commit 按钮 │
├──────────────────────────────────────────────────────┤
│ 6. Push (如需) │
│ → Ctrl+Shift+P → git push │
└──────────────────────────────────────────────────────┘常见问题
Q:Git 面板不显示怎么办?
- 确认项目根目录有
.git文件夹 - 按
Ctrl+Shift+G重新打开 - 重启 Zed
Q:Discard Changes 点了没反应?
某些版本可能需要通过命令面板执行 git discard。
Q:如何查看 commit 历史?
Zed 的 commit log 功能正在开发中。目前建议用命令行:
git log --oneline -20或使用 lazygit。
Q:如何推送到远程?
- 命令面板:
Ctrl+Shift+P→git push - 或终端中执行
git push
Q:Git 面板显示与命令行不一致?
Zed 会实时监控 Git 状态变化。如果看到不一致:
- 在 Git 面板中刷新
- 或稍等片刻自动同步
本章小结
Ctrl+Shift+G打开 Git 面板- 红色 = 删除,绿色 = 新增,diff 视图可编辑
- 点击
+Stage 文件,点击 hunk 按钮 Stage 部分改动 - 写 commit message 后
Ctrl+Enter提交 - Discard Changes 可撤销未暂存改动(不可逆)
- 复杂 Git 操作配合命令行使用
小练习
- 修改一个文件,打开 Git 面板查看 diff
- 用 Stage Hunk 只暂存部分改动
- 写一个 commit message 并提交
- 用
git log在终端中查看提交历史