
Zed 内置 Git 集成深度指南仓库激活、Git Panel、暂存提交与工作树实战【免费下载链接】zedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.项目地址: https://gitcode.com/GitHub_Trending/ze/zedZed 将 Git 版本控制能力内建在编辑器中工作区状态、暂存区、分支信息、diff 审阅、提交、Stash 乃至 AI 提交信息生成都能在不离开编辑器的情况下完成。本文以 Zed 官方 Git 集成文档为主体结合本仓库Zed 编辑器源码中crates/git、crates/git_ui的实现与assets/settings/default.json的默认配置逐项讲解仓库激活机制、Git Panel 的使用与配置、各类 diff 视图、提交与分支管理、工作树、冲突解决、Stash 操作及 Git 托管平台集成读完即可在 Zed 中跑通从改代码 → 看 diff → 暂存 → 提交 → 推送的完整工作流。内置 Git 支持以编辑器为中心管理版本控制Zed 内置了 Git 支持可让你在不离开编辑器的情况下管理版本控制。Git Panel 展示工作树状态、暂存区与分支信息你在命令行上对仓库做的改动会立即反映到 Zed 中反之亦然。对于 Zed 原生不支持的 Git 操作官方文档给出的指引是使用集成终端在编辑器内直接打开终端执行git命令来兜底。从源码结构看Zed 的 Git 能力实现位于 crates/git仓库、remote、status、commit、stash、blame 等底层模型其 UI 交互层位于 crates/git_uiGit Panel、diff 视图、branch/stash picker 等。仓库的全局开关体现在 assets/settings/default.json 的git.disable_git上若设为true则关闭全部 Git 集成特性设为false时下面的enable_status、enable_diff等子开关才会独立生效。仓库激活机制Repository ActivationZed 对仓库的发现与激活是两回事官方文档对此有明确描述项目根位于 Git 仓库内或其子目录时项目中的所有仓库立即激活。项目根不在仓库内时例如直接把主目录或一个存放多个项目的文件夹作为项目打开项目根正下方的仓库也会立即激活而更深层嵌套的仓库要等到其中某个文件被打开后才激活——本地与远程项目行为一致。未激活的仓库仍然会被完整索引与搜索只有 Git 特性status、diff、分支等需要等待激活。激活与否还与file_scan_depth设置相关见 all-settings.md任何非零的file_scan_depth都会让不在项目根目录正下方的仓库延迟激活而达到或超过扫描深度上限的仓库要等其所在目录被按需索引后才会被发现。在多文件夹项目中深度与激活都是以每个根文件夹为基准分别计算的。将file_scan_depth设为0即可关闭延迟激活此后每个被发现的仓库都会立即激活。实践要点Zed 会监控仓库文件系统事件因此你在命令行git commit、git checkout之后切回 ZedGit Panel 中的状态会自动刷新无需手动重载。认识 Git PanelGit Panel 展示工作树与 Git 暂存区的状态。打开方式有两种执行git_panel::ToggleFocus动作Linux 默认键位为Ctrl-Shift-G见 default-linux.json点击状态栏中的 Git 图标。在面板中你可以一眼看到项目当前状态哪个仓库、哪个分支处于激活状态哪些文件发生了改动以及每个文件的暂存状态。Zed 持续监控仓库命令行中的改动会被即时反映出来。Git Panel 的 UI 主体实现在 crates/git_ui/src/git_panel.rs其设置项定义与默认值见 crates/git_ui/src/git_panel_settings.rs 与 assets/settings/default.json。配置入口打开设置编辑器macOS 为Cmd,Linux/Windows 为Ctrl,即可定制 Git 行为相关设置分散在两个页面中Panels Git Panel面板停靠位置、树形/扁平视图、状态展示样式Version Control编辑器 gutter 指示器、行内 blameInline Blame、hunk 样式等。它们对应的其实是settings.json中git_panel与git两个顶层对象完整可配置项与当前仓库默认值如下{ git_panel: { button: true, // 是否在状态栏显示 Git Panel 按钮 dock: right, // 面板停靠位置left 或 right default_width: 360, // 面板默认宽度像素 status_style: icon, // 状态指示样式icon | label_color file_icons: false, // 是否显示文件图标 folder_indicator: icon, // 目录指示icon | chevron | both fallback_branch_name: main,// 未设置 init.defaultBranch 时的默认分支名 sort_by: path, // 排序方式path | name group_by: status, // 分组方式none | status | staging collapse_untracked_diff: false, tree_view: false, // 树形按文件夹层级还是扁平列表 diff_stats: true, // 是否在每个文件旁显示增删行数 show_count_badge: false, // 是否在面板图标上显示未提交改动数徽标 starts_open: false, // 启动时是否自动打开 Git Panel commit_title_max_length: 0, // 提交信息标题长度告警阈值0 为关闭 entry_primary_click_action: project_diff // 点击文件条目的默认动作 } }其中group_by、sort_by、status_style等枚举取值定义在 crates/settings_content/src/settings_content.rs枚举取值说明GitPanelGroupBynone/status/stagingstatus时按Tracked/Untracked分组staging时按Staged/Unstaged分组GitPanelSortBypath/name按路径或文件名排序GitPanelClickBehaviorproject_diff/file_diff/view_file点击文件条目打开项目级 diff、单文件 diff或直接打开文件StatusStyleicon/label_color面板内 git 状态指示用图标还是标签着色移动 Git Panel根据官方用户指南Git Panel 默认停靠在左侧不过需注意当前仓库随附的默认配置assets/settings/default.json中git_panel.dock取值为right见 default.json不同版本默认值可能有差异请以你本地环境的实际表现为准。要移动它进入Panels Git Panel修改Git Panel Dock即可把面板停靠到右侧或底部。切换为树形视图Git Panel 默认以扁平列表展示改动文件若想按文件夹层级组织可在面板右键菜单中勾选Tree View或在Panels Git Panel中开启tree_view。行内 BlameInline BlameZed 会在当前行显示 Git blame 信息。要关闭它或设置延迟显示请到Version Control Inline Git Blame调整。其 JSON 配置位于git.inline_blame下assets/settings/default.json可配置项包括{ git: { inline_blame: { enabled: true, // 关闭行内 blame delay_ms: 0, // 光标移动后延迟显示毫秒 location: inline, // 渲染位置 padding: 7, // 源码行尾到 blame 的间距em 宽度 show_commit_summary: false, min_column: 0 } } }blame 的底层解析实现在 crates/git/src/blame.rs行内展示 UI 在 crates/git_ui/src/blame_ui.rs。隐藏 Gutter 指示gutter 中表示新增、修改、删除行的彩色条可以隐藏。进入Version Control Git Gutter把Visibility设为 Hide对应 JSON 配置为{ git: { git_gutter: hide // 默认 tracked_files仅对已跟踪文件显示 } }完整取值说明见 default.json 的 git 段。提交信息换行长度Zed 会在 72 字符处折行提交信息Git 社区惯例。如需调整在设置中搜索Git Commit并修改Preferred Line Length。其底层机制是 Zed 内置了一种名为Git Commit的语言默认preferred_line_length即 72见 default.json 的 Git Commit 语言段。审阅全部改动Project Diff使用git::Diff动作Linux 默认键Ctrl-Shift-D也可在命令面板或 Git Panel 中触发可以打开Project Diff查看 Git 捕获的全部改动。Project Diff 中展示的所有改动与其它多缓冲区multibuffer行为完全一致——每一个片段都是可编辑的文件摘录详见 multibuffers.md。因此你可以在 diff 视图里直接编辑内容通过标签栏上的按钮或对应快捷键可以对单个 hunk乃至整个文件进行暂存stage或取消暂存unstage。diff 多缓冲区的实现可参考 crates/git_ui/src/diff_multibuffer.rs、project_diff.rs 与 staged_diff.rs / unstaged_diff.rs。词级 diff 高亮Word Diff Highlighting默认情况下Zed 会对被修改行内的单词级改动做高亮便于快速定位到底改了什么。想全局关闭打开设置编辑器进入Languages Tools Miscellaneous关闭Word Diff Enabled。想仅对特定语言关闭在settings.json中加入{ languages: { Markdown: { word_diff_enabled: false } } }该设置全局默认值为true见 assets/settings/default.json。Diff 视图样式Split 与 UnifiedZed 提供两种 diff 展示模式Split分屏原始版本与修改版本左右并排显示适合比较文件结构或审阅大规模改动Unified统一新增与删除行内联在同一视图中适合聚焦具体行改动。Split 为默认模式。要切换打开设置编辑器git::前缀动作的设置在 Version Control 页搜索diff view style选择Split或Unified。也可以直接在settings.json中修改默认值{ diff_view_style: unified }该键默认值为split见 default.json。关于设置编辑器的更多说明参见 configuring-zed.md。你可以随时在两种模式间切换偏好会同时作用于Project Diff、File History与Stash Diff View。这些 diff 视图都以多缓冲区形式工作支持同时编辑多个摘录。文件历史File HistoryFile History 展示单个文件的提交历史每条记录包含作者、时间戳与提交信息。选中某次提交后会打开一个只含该文件在该提交中改动的 diff 视图。打开方式任选其一在 Project Panel 中右键文件选择View File History在 Git Panel 中右键文件选择View File History在编辑器标签页上右键选择View File History用命令面板搜索file history。拉取、推送与远程仓库Fetch / Push / Pull / Remotes在 Git Panel 上点击对应按钮或在命令面板中执行git::Fetch、git::Push、git::Pull动作即可完成拉取推送。Push 目标解析顺序Zed 遵循 Git 自身的 push 配置。推送时Zed 按以下顺序确定目标远程仓库当前分支配置的pushRemoteGit 配置中的remote.pushDefault当前分支的跟踪远程仓库tracking remote。这与 Git 标准行为一致如果已在.gitconfig或通过git config配置了pushRemote/pushDefaultZed 会直接采用这些设置。多远程仓库选择器当仓库配置了多个远程时Git Panel 会出现远程选择器。点击 push/pull 按钮旁的远程按钮即可为当次操作指定使用哪个远程。暂存工作流Staging WorkflowZed 提供两种主要的暂存工作流在Project Diff中暂存或直接在Git Panel中暂存。方式一在 Project Diff 中暂存在 Project Diff 视图中可聚焦每个 hunk 并单独暂存使用标签栏按钮或执行git::StageAndNextLinux 默认键Alt-Y暂存当前 hunk 并跳到下一个需要一次性暂存全部 hunk 时执行git::StageAllLinux 默认键Ctrl-Space随后立即用git::CommitLinux 默认键Ctrl-Enter提交。方式二直接在 Git Panel 中操作从面板底部输入提交信息点击提交按钮或执行git::Commit即可自动暂存所有已跟踪文件并提交条目复选框显示[·]表示已暂存。更精细的操作包括勾选每条记录的复选框来单独暂存点击面板顶部按钮或git::StageAll暂存全部改动条目默认按Tracked与Untracked两个分区section组织每个分区可以单独暂存而不影响其他分区勾选分区头的复选框或用git::StageSection/git::UnstageSection作用于当前选中条目所在分区。这两个动作默认没有键位绑定若常用可在GitPanel上下文中自行绑定见 key-bindings.md。右键条目也可弹出这些操作。此外右键 Git Panel 中的文件选择View File可直接在编辑器中打开该文件不进入 diff选择Open Diff或Open Diff (File)则进入 diff 视图审阅改动。面板交互相关的点击行为默认值project_diff、树形展开/折叠等均可在git_panel设置中调整见上文配置小节。提交CommittingZed 提供两个提交信息输入区域第一个位于Git Panel 底部输入后按git::CommitLinux 默认键Ctrl-Enter即可立即提交所有已暂存改动第二个通过动作git::ExpandCommitEditor唤起——在 Git Panel 提交输入框聚焦时按对应键Linux 默认键Shift-Escape可展开一个更大的提交编辑器其键位见 default-linux.json。撤销一次提交Undoing a Commit在 Zed 中提交后Git Panel 提交输入框下方会出现一个显示最近一次提交的栏。点击其中的Uncommit按钮即可撤销提交其本质是执行git reset HEAD^ --soft注此命令仅撤销提交、保留所有改动在工作区--soft模式不会丢失你的修改。配置提交行宽默认提交行宽为72可在本地settings.json中修改具体方法见上文提交信息换行长度。分支管理Branch Management创建与切换分支git::Branch新建分支git::Switch或git::CheckoutBranch切换已有分支。当你在 Git 工作树中工作时切换进新工作树后应使用分支选择器来创建或检出该工作树要使用的分支避免同一分支被多个工作树同时检出。删除分支用git::Switch打开分支切换器找到目标分支后使用删除选项即可。Zed 删除前会二次确认防止误删造成数据丢失。注意你无法删除当前已检出的分支需先切换到其他分支。分支/分支切换器与相关 diff 的实现在 crates/git_ui/src/branch_picker.rs 与 crates/git_ui/src/branch_diff.rs。Git 工作树Git WorktreesGit worktree 允许你在磁盘上同时保留同一仓库的多个检出副本。当你想在不 stash、不重新构建、不影响主检出的前提下同时处理多个分支或任务时这非常有用。从标题栏项目选择器旁打开工作树选择器或执行git::Worktree动作Linux 默认键Alt-Ctrl-Shift-W见 default-linux.json。在 picker 中可以从当前分支或默认分支创建新的 linked worktree输入名称创建指定名称的工作树或让 Zed 自动命名将当前工作区切换到一个已有工作树在新窗口中打开某个已有工作树删除当前项目中未打开的 linked worktree。工作树管理要点新建工作树初始处于detached HEAD状态切换到新工作树后请用工作树选择器旁的分支选择器创建新分支或检出某个尚未被占用的已有分支。这样能避免 Zed 在不同工作树中意外检出同一分支。新工作树的存放目录由git.worktree_directory设置控制位于git对象下默认在仓库工作目录的../worktrees下创建。见 assets/settings/default.json 中关于该设置的详细注释与示例以及 all-settings.mdworktree_directory示例结果位置../worktrees默认项目在~/code/zed时创建到~/code/worktrees/zed/.git/zed-worktrees项目/.git/zed-worktrees/my-worktrees项目/my-worktrees/注意当解析出的目录在项目根外部时Zed 会自动追加以保证同名相邻仓库不冲突目录在项目根内部时不会追加额外组件本身已按项目隔离。尾部斜杠会被忽略。初始化钩子Init Setup若想在 Zed 创建 linked worktree 后执行初始化步骤可借助任务系统使用create_worktreetask hook。面向 Agent 的隔离场景参见 Worktree Isolation并行 Agent。多根工作区Multi-root Workspaces当项目包含多个 Git 仓库多根文件夹时从 picker 新建工作树会为每个仓库分别创建 linked worktree项目中非 Git 的文件夹会原样包含进新工作区。合并冲突Merge Conflictsmerge、rebase 或 pull 之后遇到冲突时Zed 会在文件中高亮冲突区域并在每个冲突上方显示解决按钮。查看冲突冲突文件会在 Git Panel 中以警告图标标出Project Diff 视图中也会高亮每个冲突区域你当前分支的改动以绿色高亮传入分支incoming branch的改动以蓝色高亮。解决冲突每个冲突提供三个按钮Use [branch-name]保留某个分支的改动显示真实分支名如mainUse [other-branch]保留另一个分支的改动如feature-branchUse Both同时保留两边改动且你的分支改动在前。点击按钮即可解决该冲突冲突标记会被移除并替换为你所选的内容。一个文件的所有冲突解决完毕后将其暂存并提交即可完成合并。技巧对于需要手工精调的复杂冲突可直接编辑文件——手动删除、、冲突标记并保留想要的内容即可。冲突 UI 实现在 crates/git_ui/src/conflict_view.rs。暂存与恢复Stashgit stash允许你临时保存未提交改动、让工作目录恢复到干净状态——特别适合需要快速切换分支或拉取更新、又不想提交半成品工作的场景。创建 Stash动作行为git::StashAll保存全部改动已暂存 未暂存 未跟踪文件并清空工作目录git::StashTracked只保存已跟踪文件的改动未跟踪文件留在原地git::StashStaged只保存已暂存改动未暂存改动留在原地需要 Git 2.35 或更新版本Git Panel 的溢出菜单会根据当前Group By模式动态提供匹配的选项按 Tracked Untracked 分组时提供Stash Tracked按 Staged Unstaged 分组时提供Stash StagedStash All则始终可用。执行这些动作时Zed 都会先弹窗询问可选的 stash 名称直接确认空输入则让 git 生成惯用的WIP on ...描述。管理 Stash通过git::ViewStash或 Git Panel 溢出菜单打开stash picker你可以查看 stash 列表浏览全部 stash 及其描述、时间戳打开 diff查看每个 stash 里到底存了什么改动Apply应用把 stash 改动应用到工作目录同时保留该 stash 条目Pop弹出应用改动并从列表移除该条目Drop丢弃不应用而直接删除不需要的 stash 条目。相关实现见 crates/git_ui/src/stash_picker.rs 与 crates/git/src/stash.rs。快速操作最新 Stash针对最近一次 stashZed 提供了直接动作Apply latest stashgit::StashApply——应用但不移除Pop latest stashgit::StashPop——应用并移除。Stash Diff 视图在 stash picker 中选中某个 stash 后按键对应stash_picker::ShowStashItem动作即可进入 stash 的 diff 视图其中的键位如下Linux 默认见 default-linux.json动作键位Linux 默认Apply stashgit::ApplyCurrentStashCtrl-SpacePop stash应用并移除git::PopCurrentStashCtrl-Shift-SpaceDrop stash不应用直接删除git::DropCurrentStashCtrl-Shift-BackspaceAI 辅助提交信息AI Support in GitZed 目前支持由 LLM 生成提交信息。使用方式聚焦 Git Panel 内的提交信息编辑框点击左下角的铅笔图标或执行动作git::GenerateCommitMessageLinux 默认键Alt-L。前提是你需要先配置好 LLM Provider——既可以使用自己的 API Key也可以使用 Zed 托管的 AI 模型参见 AI 快速开始。指定提交信息专用模型可以为该任务指定偏好的模型在 agent 设置中加入commit_message_model字段详见 Feature-specific models{ agent: { commit_message_model: { provider: anthropic, model: claude-4-5-haiku } } }追加自定义指令只影响提交信息生成的指令在 agent 设置中使用commit_message_instructions字段{ agent: { commit_message_instructions: Use the Conventional Commits format: type(scope): description. } }同时作用于提交信息与 Agent 的更广泛指令使用全局AGENTS.md文件——macOS/Linux 位于~/.config/zed/AGENTS.mdWindows 位于%APPDATA%\Zed\AGENTS.md。这些指令会与其它指令文件如.rules、项目内AGENTS.md一并发送给模型。相关默认行为见 assets/settings/default.jsonagent.commit_message_include_project_rules默认为true即生成提交信息时会把项目规则文件纳入提示词。版本提示在 Zed v1.4.0 之前此能力通过Rules Library配置该功能已被移除。迁移方法见 Migrating from Rules。Git 托管平台集成与 PermalinksGit IntegrationsZed 与主流 Git 托管服务集成使 commit hash、Issue、Pull Request、Merge Request 引用变为可点击链接。目前支持托管版本的GitHub、GitLab、Bitbucket、SourceHut、Tangled、Codeberg。自托管实例Self-HostedZed 会通过检查 Git remote URL 中的关键字自动识别托管服务商例如自托管 URL 里包含gitlab、gitea等已识别的服务商名称时Zed 无需任何配置即可自动注册该托管商。如果自托管实例的 URL 不含可识别关键字可手动配置git_hosting_providers让 commit hash 与 permalink 正确解析到你的域名{ git_hosting_providers: [ { provider: gitlab, name: Corp GitLab, base_url: https://git.example.corp } ] }字段说明provider指定托管服务类型。支持github、gitlab、bitbucket、gitea、forgejo、sourcehut、tangledname可选作为该实例的展示名称base_url自托管服务器的根 URL。可以同时配置多个自定义 Provider 以应对多个自托管实例。该设置的默认空数组与注释示例见 assets/settings/default.json其解析实现可参考 crates/git/src/hosting_provider.rs。Permalinks永久链接Zed 可以在托管服务上打开或复制指向文件、代码选区含特定 commit的永久链接方便分享某一行或某段范围。对编辑器中的当前选区执行editor::CopyPermalinkToLine或editor::OpenPermalinkToLine可在命令面板中搜索permalink或绑定自定义键位参见 key-bindings.md或右键选择Copy Permalink to Line。对整个文件不限定行可从文件标签页或 Project Panel 右键选择Open File Permalink/Copy File Permalink。Diff Hunk 键盘快捷键查看带改动的文件时Zed 会展示可展开/折叠的 diff hunk便于详细审阅展开全部 diff hunkseditor::ExpandAllDiffHunks折叠全部 diff hunks按Escape绑定到editor::Cancel切换选中 hunks 的展开状态editor::ToggleSelectedDiffHunks在 hunks 之间跳转editor::GoToHunk与editor::GoToPreviousHunk。技巧Escape是快速折叠所有已展开 diff hunk、回到改动总览的最快方式。常用 Git 动作速查Action Reference下表中的键位以当前仓库随附的 Linux 默认键位为准来源 assets/keymaps/default-linux.jsonmacOS / Windows 默认键位会以Cmd/ 相应修饰键呈现不同组合部分动作默认无键位可按照 key-bindings.md 中的方法自行绑定。动作Linux 默认键位说明git_panel::ToggleFocusCtrl-Shift-G聚焦/打开 Git Panelgit::DiffCtrl-Shift-D/ Git Panel 内Ctrl-G D打开 Project Diffgit::StageAllCtrl-Space暂存全部改动git::UnstageAllCtrl-Shift-Space取消暂存全部改动git::ToggleStagedCtrl-Alt-Y/ Git Panel 内Space切换当前条目暂存状态git::StageAndNextAlt-Y暂存当前 hunk 并跳到下一处git::UnstageAndNextAlt-Shift-Y取消暂存当前 hunk 并跳到下一处git::CommitCtrl-Enter提交git::ExpandCommitEditorShift-Escape展开更大的提交信息编辑器git::FetchCtrl-G Ctrl-G拉取远程引用git::PushCtrl-G ↑Ctrl-G Up推送git::PullCtrl-G ↓Ctrl-G Down拉取并合并git::PullRebaseCtrl-G Shift-Down拉取并 rebasegit::ForcePushCtrl-G Shift-Up强制推送git::Restore/git::RestoreAndNextCtrl-K Ctrl-R还原改动git::RestoreFileGit Panel 内Delete/Backspace还原整个文件git::BlameAlt-G B查看 blame 信息git::WorktreeAlt-Ctrl-Shift-W打开工作树选择器git::GenerateCommitMessageAlt-L用 AI 生成提交信息git::ApplyCurrentStashCtrl-Spacestash diff 内应用当前 stashgit::PopCurrentStashCtrl-Shift-Spacestash diff 内弹出当前 stashgit::DropCurrentStashCtrl-Shift-Backspacestash diff 内丢弃当前 stashgit::StageSection/git::UnstageSection默认未绑定暂存/取消暂存整个分区可在GitPanel上下文绑定上述动作的定义与面板/视图的对应关系可到 crates/git_ui 与 crates/zed_actions 中按名字检索确认。把 Zed 用作 Git 提交编辑器Git CLI 配置如果希望在命令行提交时也使用 Zed 编辑提交信息可以用zed --wait等待 Zed 窗口关闭后再继续执行命令git config --global core.editor zed --wait或者在 shell 环境~/.zshrc、~/.bashrc等中设置export GIT_EDITORzed --wait这样git commit弹出的提交信息编辑器就是 Zed与在 Git Panel 内提交获得一致的行宽、语法与交互体验。结语围绕一份 Git 集成指南本文结合 Zed 仓库源码crates/git、crates/git_ui与默认配置assets/settings/default.json完整梳理了从仓库激活、Git Panel、diff/历史审阅、暂存与提交、分支与工作树到冲突解决、Stash、AI 提交信息与托管平台集成的全链路能力。想深入了解任意设置项的详细取值可继续查阅全量设置参考、键位绑定指南与多缓冲区说明。【免费下载链接】zedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.项目地址: https://gitcode.com/GitHub_Trending/ze/zed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考