Git

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

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

  • 提交
  • 暂存、推送、拉取和抓取
  • 项目差异:所有更改的多缓冲区视图
  • 缓冲区和编辑器滚动条中的差异指示器
  • 编辑器中未暂存更改的行内差异切换和恢复
  • 项目面板中的 Git 状态
  • 分支创建和切换
  • Git blame 视图
  • Git stash pop、apply、drop 和 view

Git 面板

Git 面板提供您的工作树和 Git 暂存区的鸟瞰图。

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

在面板中,您可以一目了然地查看项目状态——哪个仓库和分支处于活动状态,哪些文件已更改以及每个文件的当前暂存状态。

Zed 监控您的仓库,因此您在命令行上所做的更改会立即反映出来。

项目差异

您可以通过打开项目差异 (ctrl-g d|ctrl-g d) 在 Zed 中查看 Git 捕获的所有更改,该操作可通过命令面板或 Git 面板中的 git: diff 操作访问。

项目差异中显示的所有更改行为与任何其他多缓冲区完全相同:它们都是文件的可编辑摘录。

您可以通过点击选项卡栏上的按钮或其相应的快捷键来暂存或取消暂存每个区块以及整个文件。

抓取、推送和拉取

通过 Git 面板上可用的按钮或通过命令面板查看相应的操作来在 Zed 中从您的 Git 仓库抓取、推送或拉取:git: fetchgit: pushgit: pull

暂存工作流程

Zed 有两种主要的暂存工作流程,使用项目差异或直接使用面板。

使用项目差异

在项目差异视图中,您可以专注于每个区块并通过单击选项卡栏按钮或通过快捷键 git: stage and next (cmd-y|alt-y) 单独暂存它们。

同样,使用 git: stage all (cmd-ctrl-y|ctrl-space) 快捷键同时暂存所有区块,然后立即使用 git: commit (cmd-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 stash 允许您临时保存未提交的更改并将您的工作目录恢复到干净状态。当您需要快速切换分支或拉取更新而无需提交未完成的工作时,这特别有用。

创建暂存

要暂存所有当前更改,请使用 git: stash all 操作。这将保存已暂存和未暂存的更改到新的暂存条目并清理您的工作目录。

管理暂存

Zed 提供了一个全面的暂存选择器,可通过 git: view stash 访问。从暂存选择器中,您可以:

  • 查看暂存列表:浏览所有已保存的暂存及其描述和时间戳
  • 打开差异:准确查看每个暂存中存储的更改
  • 应用暂存:将暂存更改应用到您的工作目录,同时保留暂存条目
  • 弹出暂存:应用暂存更改并从列表中删除暂存条目
  • 删除暂存:删除不需要的暂存条目而不应用它们

快速暂存操作

为了更快的操作流程,Zed 提供直接操作来处理最近的暂存

  • 应用最新暂存:使用 git: stash apply 应用最近的暂存而不将其删除
  • 弹出最新暂存:使用 git: stash pop 应用并删除最近的暂存

暂存差异视图

在差异视图中查看特定暂存时,您可以通过界面获得额外的选项

  • 将当前暂存应用到您的工作目录
  • 弹出当前暂存(应用并删除)
  • 删除暂存而不应用更改

要打开暂存差异视图,请从暂存选择器中选择一个暂存并使用 stash picker: show stash item (ctrl-shift-v|ctrl-shift-v) 快捷键。

Git 中的 AI 支持

Zed 目前支持 LLM 驱动的提交消息生成。您可以通过将焦点放在 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"
    }
  }
}

未来可能会有更高级的 AI 与 Git 功能集成。

Git 集成

Zed 集成流行的 Git 托管服务,以确保 Git 提交哈希和对问题、拉取请求和合并请求的引用成为可点击的链接。

Zed 目前支持链接到 GitHubGitLabBitbucketSourceHutCodeberg 的托管版本。

Zed 还具有复制永久链接功能,可以创建指向您的 Git 托管服务上代码片段的永久链接。这些链接对于在特定提交中共享文件中特定行或行范围很有用。通过 命令面板(搜索 permalink)、通过为 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
无默认绑定
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
无默认绑定
git: switch
无默认绑定
git: checkout branch
无默认绑定
git: blamecmd-alt-g b
git: stash all
无默认绑定
git: stash pop
无默认绑定
git: stash apply
无默认绑定
git: view stash
无默认绑定
editor: toggle git blame inline
无默认绑定
editor: expand all diff hunkscmd-"
editor: toggle selected diff hunkscmd-'

并非所有操作都有默认快捷键,但可以通过自定义您的键映射进行绑定。

Git CLI 配置

如果您还希望在从命令行提交时将 Zed 用作您的 git 提交消息编辑器,您可以使用 zed --wait

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

或者将以下内容添加到您的 shell 环境中(在 ~/.zshrc~/.bashrc 等)

export GIT_EDITOR="zed --wait"