Git

Zed 目前提供了一套基础的 Git 功能,未来将支持更多高级功能,例如冲突解决工具、逐行暂存等。

以下是当前支持的所有功能概览:

  • 提交
  • 暂存、推送、拉取和获取
  • 项目差异:所有更改的多缓冲区视图
  • 缓冲区和编辑器滚动条中的差异指示器
  • 编辑器中未暂存更改的内联差异切换和还原
  • 项目面板中的 Git 状态显示
  • 分支创建与切换
  • Git 追溯查看

Git 面板

Git 面板可让您全面了解工作树和 Git 暂存区的状态。

您可以使用 git panel: toggle focus 或点击状态栏中的 Git 图标来打开 Git 面板。

在面板中,您可以一目了然地查看项目状态——当前激活的代码库与分支、已修改的文件列表,以及每个文件的暂存状态。

Zed会持续监控您的代码库,确保您在命令行中做出的更改能实时同步显示。

项目差异对比

通过命令面板的 git: diff 操作或Git面板,打开项目差异视图(ctrl-g d|ctrl-g d)即可查看Git捕获的所有变更。

项目差异视图中显示的所有变更行为与多缓冲区完全一致:它们都是文件的可编辑片段。

您可以通过标签栏的按钮或对应快捷键,对每个代码块或整个文件进行暂存/取消暂存操作。

获取、推送与拉取

通过Zed中的Git面板按钮或命令面板中的相应操作,从您的Git仓库进行拉取、推送或获取:git: fetchgit: pushgit: pull

暂存工作流程

Zed提供两种主要的暂存工作流程,可以使用项目差异视图或直接通过面板操作。

使用项目差异视图

在项目差异视图中,您可以专注于每个代码块,并通过点击标签栏按钮或使用快捷键git: stage and nextcmd-y|alt-y)逐个暂存它们。

同样地,使用git: stage allcmd-ctrl-y|ctrl-space)快捷键可以一次性暂存所有代码块,然后立即通过git: commitcmd-enter|ctrl-enter)提交。

使用Git面板

在面板中,您只需输入提交消息并点击提交按钮或使用git: commit。这将自动暂存所有已跟踪的文件(在条目的复选框中以[·]表示)并提交它们。

可以通过每个条目对应的复选框来暂存修改。使用面板顶部的按钮或git: stage all可一次性暂存所有变更。

提交操作

Zed 提供两种提交文本框:

  1. 第一种位于 Git 面板底部。按下 cmd-enter|ctrl-enter 将立即提交所有已暂存的更改。
  2. 第二种可通过操作 git: expand commit editor 触发,或在 Git 面板提交文本框处于焦点状态时按 shift-escape| 启动。

撤销提交

在 Zed 中完成提交后,Git 面板的提交文本框下方会立即显示一个状态栏,其中包含最近提交的记录。 您可以使用其中的"取消提交"按钮执行 git reset HEADˆ--soft 命令。

Git 中的 AI 支持

Zed 目前支持基于大语言模型的提交信息生成功能。 当您在 Git 面板中聚焦于提交信息编辑器时,可通过点击左下角的铅笔图标,或使用快捷键 git: generate commit message (alt-tab|alt-l) 来调用 AI 生成提交信息。

请注意:您需要配置 LLM 服务商以完成计费设置,可通过使用自己的 API 密钥或试用/购买 Zed 托管的 AI 模型实现。请访问 AI 配置页面 了解具体操作。

您可以通过配置 commit_message_model 智能体设置来指定首选模型。更多信息请参阅 功能特定模型

{
  "agent": {
    "version": "2",
    "commit_message_model": {
      "provider": "anthropic",
      "model": "claude-3-5-haiku"
    }
  }
}

未来可能会实现更高级的人工智能与 Git 功能的集成。

Git 集成功能

Zed 与主流 Git 托管服务平台深度集成,可将 Git 提交哈希值及问题追踪、拉取请求与合并请求的引用编号自动转换为可点击的快捷链接。

当前支持的托管平台包括: GitHub GitLab Bitbucket SourceHut Codeberg

Zed还提供"复制永久链接"功能,可生成指向Git托管服务中代码片段的永久链接。 这类链接适用于分享特定提交中某文件的指定行或行范围。 您可以通过以下方式触发此操作:在命令面板中搜索permalink; 创建custom key bindings绑定至editor::CopyPermalinkToLineeditor::OpenPermalinkToLine操作; 或直接在编辑器中选中行后右键点击选择Copy Permalink

差异区块快捷键

当查看含变更的文件时,Zed会显示可展开/折叠的差异区块以便详细审阅:

  • 展开所有差异块editor: expand all diff hunks(快捷键 cmd-"|ctrl-"
  • 折叠所有差异块:按下 Escape(绑定为 editor: cancel
  • 切换选中差异块editor: toggle selected diff hunks(快捷键 cmd-'|ctrl-'
  • 在差异块间导航editor: go to hunkeditor: go to previous hunk

提示: Escape 键是折叠所有已展开差异块并返回更改概览的最快捷方式。

操作参考

操作快捷键绑定
git: add
No default binding
git: stage allcmd-ctrl-y
git: unstage allcmd-ctrl-shift-y
git: toggle stagedspace
git: stage and nextcmd-y
git: unstage and nextcmd-shift-y
git: commitcmd-enter
git: expand commit editorshift-escape
git: pushctrl-g up
git: force pushctrl-g shift-up
git: pullctrl-g down
git: fetchctrl-g ctrl-g
git: diffctrl-g d
git: restorecmd-alt-z
git: restore filecmd-delete
git: branch
No default binding
git: switch
No default binding
git: checkout branch
No default binding
git: blamecmd-alt-g b
editor: toggle git blame inline
No default binding
editor: expand all diff hunkscmd-"
editor: toggle selected diff hunkscmd-'

并非所有操作都预设了快捷键,但可通过自定义键位映射进行绑定。

Git 命令行配置

若希望在命令行执行提交时,同时将 Zed 设置为Git 提交信息编辑器,可使用以下命令:

git config --global core.editor "zed --wait"

或将以下配置添加到您的 shell 环境文件中(如 ~/.zshrc~/.bashrc 等):

export GIT_EDITOR="zed --wait"