Skip to content

Git 版本控制

这一章解决什么问题

帮助你掌握 Zed 内置 Git 面板的完整使用流程,包括查看改动、暂存、diff、commit 等操作,并了解什么时候用 Zed 的 Git 功能,什么时候用命令行。

资料来源

访问时间:2025-06-09

你会在什么时候用到它

  • 完成代码修改后需要提交时
  • 想查看自己改了哪些文件时
  • 需要撤销错误修改时
  • 需要处理合并冲突时

认识 Git 面板

Zed 的 Git 面板是内置的版本控制界面,无需安装任何扩展。

打开 Git 面板

方式操作
快捷键Ctrl+Shift+G
命令面板Ctrl+Shift+Pgit panel: toggle focus
状态栏点击状态栏的分支名

Git 面板界面

Git 面板默认位于左侧,显示以下信息:

  • 当前分支名:如 mainfeature-branch
  • 改动文件列表:显示 modified、added、deleted 状态的文件
  • Commit 输入框:编写 commit message
  • Commit 按钮:执行提交

Zed Git 面板

截图替换建议:在项目中修改几个文件后打开 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

  1. 在 Git 面板中点击一个 modified 文件
  2. 编辑器会显示 diff 视图:
    • 红色区域-):删除的代码
    • 绿色区域+):新增的代码

Diff 视图操作

操作说明
点击 +暂存该块改动(stage hunk)
点击 -取消暂存该块改动(unstage hunk)
编辑 diff 内容Zed 的 diff 是可编辑的,可以直接在 diff 中修改代码

切换 Diff 显示模式

Zed 支持两种 diff 显示模式:

  • Unified(统一视图):删除和新增在同一区域显示
  • Split(分栏视图):左边显示旧版本,右边显示新版本

可以在设置中切换:

json
{
  "diff_view_style": "unified"
}

Word Diff 高亮

Zed 可以在 diff 中精确到单词级别的高亮,帮助你快速定位具体改动。

注意:具体界面按钮可能因版本而异,以你当前 Zed 版本的实际界面为准。

暂存改动(Stage)

暂存单个文件

在 Git 面板中:

  1. 将鼠标悬停在文件上
  2. 点击出现的 Stage 按钮(或 + 图标)
  3. 文件从 Modified 变为 Staged 状态

暂存部分改动(Stage Hunk)

如果你只想提交文件中的部分改动:

  1. 点击文件查看 diff
  2. 在 diff 中,点击你想暂存的改动块旁边的 Stage Hunk 按钮
  3. 只有该块被暂存,其他改动仍留在工作区

精确控制

Stage Hunk 是精细提交的关键。比如你在一个文件中同时做了重构和 bug 修复,可以用 Stage Hunk 分别提交,让 commit 历史更清晰。

暂存所有改动

在 Git 面板顶部,点击 Stage All 按钮,将所有 modified 文件一次性暂存。

取消暂存(Unstage)

  • 点击 staged 文件旁边的 Unstage 按钮(或 - 图标)
  • 或点击 Unstage All 取消所有暂存

编写 Commit Message

Commit 输入框

在 Git 面板底部有 commit message 输入框:

  1. 输入简洁明了的提交描述
  2. 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:

  1. 暂存你的改动
  2. 在 commit 输入框旁边,点击 AI 生成按钮
  3. Zed 会分析你的 diff 并生成建议的 commit message
  4. 可以编辑后使用

功能状态:此功能需要配置 AI 模型。详见 AI 辅助开发 章节。

提交(Commit)

基本提交流程

1. 修改代码 → 文件显示为 Modified
2. 查看 Diff → 确认改动正确
3. Stage 改动 → 文件变为 Staged
4. 写 Commit Message → 描述这次改动
5. 点击 Commit → 提交完成

Commit 后操作

提交后,你可以:

  • PushCtrl+Shift+Pgit push 推送到远程
  • 查看历史:Zed 的 commit log 功能(如果在你的版本中可用)

撤销改动

撤销未暂存的改动

在 Git 面板中:

  1. 右键点击 modified 文件
  2. 选择 Discard Changes
  3. 文件恢复到最后一次 commit 的状态

不可逆操作

Discard Changes 会永久丢失未暂存的改动,请确认后再执行!

撤销已暂存的改动

  1. 点击 staged 文件旁的 Unstage 按钮
  2. 文件回到 modified 状态
  3. 如果需要,再执行 Discard Changes

分支管理

查看当前分支

状态栏和 Git 面板顶部都显示当前分支名。

切换分支

  1. Ctrl+Shift+Pgit checkout
  2. 或使用分支选择器(如果界面中有)

创建新分支

  1. Ctrl+Shift+Pgit branch
  2. 输入新分支名

注意:分支管理的具体界面可能因版本而异。如果 Zed 的界面操作不方便,可以使用终端执行 git checkout -b <分支名>

处理合并冲突

当合并或 rebase 产生冲突时,Zed 会显示冲突界面。

查看冲突

冲突文件在 Git 面板中标记为冲突状态,编辑器中会显示冲突标记:

typescript
<<<<<<< HEAD
console.log("本地代码");
=======
console.log("远程代码");
>>>>>>> feature-branch

解决冲突

Zed 提供冲突解决界面:

  1. 点击冲突文件

  2. 每个冲突区域会显示选项:

    • Accept Ours:保留本地代码
    • Accept Theirs:保留远程代码
    • Accept Both:保留双方代码
    • 或手动编辑
  3. 解决所有冲突后,暂存文件并提交

放弃合并

如果冲突太多想放弃:

powershell
git merge --abort        # 放弃合并
git rebase --abort       # 放弃 rebase

Zed Git 与命令行 Git 的配合

Zed 的 Git 面板适合日常操作,但某些场景建议用命令行:

✅ 适合用 Zed Git 面板

场景原因
查看改动可视化 diff 直观
逐行/逐块 stage界面操作更方便
写 commit message集成 AI 生成
快速 commit无需切换窗口
解决简单冲突可视化选择

➡️ 建议用命令行 / 其他工具

场景推荐工具原因
复杂分支操作命令行 git更灵活
查看详细历史命令行 git log信息更全面
交互式 rebase命令行 git rebase -iZed 暂不支持
高级 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 功能正在开发中。目前建议用命令行:

powershell
git log --oneline -20

或使用 lazygit

Q:如何推送到远程?

  • 命令面板:Ctrl+Shift+Pgit push
  • 或终端中执行 git push

Q:Git 面板显示与命令行不一致?

Zed 会实时监控 Git 状态变化。如果看到不一致:

  1. 在 Git 面板中刷新
  2. 或稍等片刻自动同步

本章小结

  • Ctrl+Shift+G 打开 Git 面板
  • 红色 = 删除,绿色 = 新增,diff 视图可编辑
  • 点击 + Stage 文件,点击 hunk 按钮 Stage 部分改动
  • 写 commit message 后 Ctrl+Enter 提交
  • Discard Changes 可撤销未暂存改动(不可逆)
  • 复杂 Git 操作配合命令行使用

小练习

  1. 修改一个文件,打开 Git 面板查看 diff
  2. 用 Stage Hunk 只暂存部分改动
  3. 写一个 commit message 并提交
  4. git log 在终端中查看提交历史

基于 Zed 官方文档及社区资料整理,仅供学习参考