原生 macOS · 键盘优先 · Git 客户端

看清每一次改动,整理好每一次提交。

审阅代码差异、拆分提交、并行处理分支,并从文件与行历史中查清改动的来龙去脉。

macOS 14+ · Developer ID 签名并经过 Apple 公证

对照文件差异,复核暂存内容后再提交。 审阅与暂存 · 在新标签页查看大图

三个日常工作流

从一组改动,到有条理的提交。

点击演示中的选项,看看每一步如何改变你的工作。

01

把混在一起的改动,拆成清楚的提交。

金额修复和文档修改同时出现在工作区。先对照 Diff,再只暂存金额修复,文档留给下一次提交。

  1. 打开文件状态,审阅未暂存差异。
  2. 选择文件、完整 Hunk 或受支持的连续行暂存。
  3. 复核暂存内容,写下这次提交的目的。

连续行暂存适用于已跟踪文本文件的单个完整 Hunk;AI 生成的改动也由你审阅和决定。

查看实际界面
审阅与拆分演示

未暂存 2

price.js
README.md
− return price * qty;
+ return Math.round(price * qty * 100) / 100;

两项改动都还在工作区。

已暂存 1

price.js

未暂存 1

README.md
提交草稿

修正金额舍入

金额修复已暂存,文档修改保留在工作区。

交互示意

02

修复紧急问题,保留手上的开发现场。

新功能还没写完,主线需要一个修复。创建独立 Worktree,在同一窗口切换标签,分别处理两个分支。

  1. 从目标分支创建并打开 Worktree。
  2. 在独立目录里完成修复。
  3. 切回原标签,继续之前的工作。

各仓库标签保留选择、搜索、滚动位置和提交草稿。

查看实际界面
并行分支演示

Worktree shop-demo

feature/checkout

checkout.js
checkout.test.js
提交草稿

完善结账流程

新功能的改动和草稿保留在这个工作树。

Worktree shop-fix

hotfix/rounding

price.js
提交草稿

修正金额舍入

修复使用独立目录;切回左侧标签继续开发。

交互示意

03

查清这段代码,为什么变成现在这样。

先比较两个修订看改了什么,再通过 Blame 找到来源,从已提交快照追溯连续行范围的演变。

  1. 选择两个提交、分支或标签进行 A/B 比较。
  2. 用 Blame 查看代码行的提交信息。
  3. 从已提交快照选择连续行,查看历史补丁。

修订比较只读取仓库;行历史从明确的提交、文件和行范围开始。

查看实际界面
代码演变演示

v1.0 v1.1 price.js

− return price * qty;
+ return Math.round(price * qty * 100) / 100;

两个修订之间,金额计算增加了舍入处理。

Blame price.js @ v1.1

42return Math.round(price * qty * 100) / 100;
这行的来源

修正金额舍入

Demo · v1.1

从代码行找到对应提交及其说明。

已提交快照 price.js @ v1.1 · 41–43

  1. v1.1

    修正金额舍入

    Math.round(price * qty * 100) / 100
  2. v1.0

    加入金额计算

    price * qty

沿选定行范围阅读演变,保持追溯起点可见。

交互示意

看看实际界面

九个画面,走进日常 Git 工作。

真实应用画面,使用虚构仓库、作者和示例内容。点击查看大图。

对照文件差异,复核暂存内容后再提交。 审阅与暂存 · 在新标签页查看大图
对照文件差异,复核暂存内容后再提交。
沿提交图查看分支与合并,阅读每次改动的说明。 提交历史 · 在新标签页查看大图
沿提交图查看分支与合并,阅读每次改动的说明。
查看同一文件的历次提交和对应差异。 文件历史 · 在新标签页查看大图
查看同一文件的历次提交和对应差异。
从代码行找到对应提交及作者信息。 代码行来源 · 在新标签页查看大图
从代码行找到对应提交及作者信息。
用独立工作目录并行处理不同分支。 并行工作树 · 在新标签页查看大图
用独立工作目录并行处理不同分支。
并排查看修改前后的图片,保持原始比例。 图片差异 · 在新标签页查看大图
并排查看修改前后的图片,保持原始比例。
查看提交中的图片及其前一版本。 历史图片 · 在新标签页查看大图
查看提交中的图片及其前一版本。
选择两个提交、分支或标签,浏览它们之间的改动。 修订比较 · 在新标签页查看大图
选择两个提交、分支或标签,浏览它们之间的改动。
从已提交快照选择连续行,阅读相关历史补丁。 连续行历史 · 在新标签页查看大图
从已提交快照选择连续行,阅读相关历史补丁。

选择获取方式

从官网获取最新版,或通过商店管理更新。

两种渠道均面向 macOS 14 及以上。渠道版本可能不同,请按自己的更新习惯选择。

Direct 官网版

当前版本 2.3.8

下载 DMG 安装;通过应用内的“检查更新”获取后续版本,也可开启自动检查。

Developer ID 签名 · Apple 公证 · Sparkle 更新

下载 macOS 版

Mac App Store

当前公开版本 2.2.3

通过 Mac App Store 安装与更新;新版本经审核上架后在商店提供。

商店版使用 macOS 沙盒,仓库访问需按提示授权。

Mac App Store 下载

本页工作流以最新官网版为准;安装前请核对商店页面列出的版本与获取条件。

下载之后

从你的下一次提交开始。

⌘O 打开仓库,⌘1 进入文件状态;选择一个文件,审阅 Diff,再决定要暂存哪些改动。

持续改进

最新更新

查看各版本新增功能与体验改进。

2.3.8 · 完善历史搜索与路径筛选

最新官网版本
  • 支持按精确路径、路径片段、文件名或通配符筛选提交,可组合多个路径并忽略大小写。
  • 支持沿重命名追踪单个文件,分页查看旧名称和已删除文件的提交历史。
  • 用常驻的“涉及路径”标签和消息、作者、哈希搜索提示区分两类筛选;重新打开仓库时恢复筛选选项。
查看完整更新记录

2.3.7 · 改善 fetch 和 push 后的列表刷新

  • 改善 fetch、push 和刷新后的历史与文件列表稳定性。相同结果不再重绘列表,保持选择、详情与滚动位置。
  • 历史变化时就地更新受影响的行;刷新期间保留已加载的提交,不再重复扩大加载范围。

2.3.6 · 修复启动后仓库标签不显示

  • 修复启动后仓库标签缺失的问题。恢复或新打开仓库时,标签标题、选中状态和关闭按钮会及时显示并更新。

2.3.5 · 更流畅的标签拖动与更简洁的克隆

  • 拖动完整仓库标签时,相邻标签即时让位,松手短距离归位;靠近边缘时自动滚动。
  • 克隆对话框仅保留一个目录选择入口,可在系统选择器中新建目录或选择已有空目录,直接克隆到选中的目录。
  • 保留目录名中的空格及末尾空格;目标目录非空时保护已有文件。

2.3.4 · 更清晰的标签拖拽与分支选择

  • 拖动仓库标签时显示跟随预览、原标签淡化和插入位置提示,排序时保留当前选中标签与草稿。
  • 移除克隆对话框中父目录选择按钮旁重复的“选择”文案。
  • 输入仓库链接后预取远端分支,显示加载状态并提供分支菜单;仍可手输分支名、使用默认分支,或在读取失败后重试。

2.3.3 · 拖拽调整仓库标签顺序

  • 拖动仓库标签标题即可调整同一窗口中的排列顺序,重启后恢复顺序;排序时保留当前选中标签和本次会话中的草稿。
  • 克隆时选择父目录、修改文件夹名称,并预览或复制完整目标路径;同时修复初始化对话框中路径标签重复显示的问题。

2.3.2 · 文件列表浏览更流畅

  • 历史详情的 Changed Files 使用独立滚动区域和可复用原生行,大量文件浏览更顺手,滚动文件时提交信息保持在原位。
  • 改善储藏、LFS、补丁、丢弃、冲突、子模块提交、Reflog、文件搜索和命令日志列表的滚动与更新。刷新保持浏览位置,文件搜索的键盘定位更顺畅。
  • 交互式 Rebase 重排提交时,编辑状态跟随对应提交保留。

2.3.1 · 侧栏右键操作更顺手

  • 侧栏右键菜单覆盖整行,包括名称、图标周围的留白,无需精准对准文字。分支、标签、远端、远端分支、暂存、文件状态和工作树继续使用原有操作与确认保护。
  • 分支先按完整路径排序,再生成文件夹与收拢视图,无路径分支保持正确位置,搜索过滤时也沿用同一顺序。

2.3.0 · 子模块管理、修订比较与图片浏览

  • 通过仓库 URL、路径及可选分支添加子模块;查看本地改动、提交和相对父仓库的差异,获取远端信息,并经明确确认执行初始化、更新、同步或移除。
  • 比较任意两个提交、分支或标签,交换比较方向,浏览变更文件及文本或并排图片预览,全程不修改仓库。
  • 从已提交的文件快照追溯连续行范围的演变与补丁,并明确展示起点提交、文件和行范围。
  • 图片按原始比例完整展示并留出周围空间;工作区 Diff、提交快照和修订比较支持缩放、拖拽、滚动及恢复适合窗口,并排图片可分别控制缩放。

2.2.6 · 更安全的 Git 恢复与更可靠的仓库操作

  • 修复索引时保留已有 Git 锁;仅重建已确认损坏的索引,先验证替代内容再切换,并单独保留原索引的恢复副本。
  • 推送、合并与变基分支使用完整引用,按自定义 Fetch 映射保留远端分支身份;支持 SHA-256 子模块对象 ID,较旧受支持 Git 可初始化仓库并完整预览储藏。
  • 索引预检查失败后正确结束提交进度,可关闭结果并重新提交;保留 Hook 与中止操作的错误,重启 FSMonitor 时由 Git 管理端点与锁。
  • 多文件 Diff 分别保留各文件的 Hunk 边界;限制命令输出,让排队中的提交树、历史、Diff、补丁及丢弃预览响应取消与超时。
  • 明确储藏的“保留暂存”选项:暂存改动保留在工作区和暂存区中,储藏仍会保存暂存与未暂存的改动。

2.2.5 · 文件丢弃预览与仓库加载修复

  • 右键文件状态可定位提交编辑器或打开 Reset;支持勾选文件、搜索列表,并在丢弃前查看每个文件的完整 Diff。
  • 默认保留暂存内容;包含暂存需显式开启,删除未跟踪文件需单独确认,预览目标发生变化时阻止操作。
  • 恢复侧栏双击操作:切换本地分支、检出提交标签、从远端分支创建本地分支、抓取远端,或应用并删除 Stash;单击继续展示预览。
  • 修复仓库首次加载,以及关闭标签页、切换仓库或更换 Git 可执行文件后旧结果干扰当前会话的问题。

2.2.4 · 分支路径分组与统一双击创建入口

  • 本地与远端分支按名称路径组织为可折叠文件夹,记住收拢状态;搜索时展开匹配路径,从其他入口选中分支时展开父目录。
  • 双击本地分支、远端分支或提交标签,打开以该引用为起点的创建分支表单;保留远端跟踪与重名保护,Stash 使用既有的“从 Stash 创建分支”表单。

2.2.3 · 仓库启动提速与后台窗口开销优化

  • 优化大量分支和标签仓库的启动与侧边栏响应;历史记录使用紧凑引用徽标,完整引用仍可在详情和提示中查看。
  • 修正分支与标签同名时的名称解析,保持历史选择与引用操作正确。
  • 完全遮挡或最小化窗口时暂停自动刷新,恢复可见后合并待处理变化;手动刷新与 Git 操作后的状态更新继续可用。
  • 后台仓库标签页释放大 Diff 的渲染缓冲,返回未变化的内容时恢复比较、选择和滚动位置。
  • 统一分支、标签、远端、Worktree 和 Stash 的删除确认与进度展示;明确展示强制删除与远端删除选项,远端标签删除完成后再删除本地标签。
  • 远端标签已不存在时仍可完成本地删除,并保留标签变更保护;改善仓库库、快速切换和欢迎页的操作按钮布局。

2.2.2 · 多仓库标签页与 Diff 刷新改进

  • 在同一窗口通过标签页打开多个仓库;切换时保留各仓库的选择、搜索、滚动位置和提交草稿,Git 操作可在后台继续执行。
  • 重启后恢复仓库标签页顺序和上次选中的标签;其他恢复的仓库在首次切换进入时才加载。
  • 关闭最后一个仓库标签后返回欢迎页,保留窗口以继续打开、克隆或初始化仓库;支持 Control-Tab 切换标签和 Command-W 关闭当前标签。
  • 文件继续修改但 Git 状态未变时,选中文件的 Diff 仍能及时更新;切换分支后清理旧比较内容,并在保留文件选择的同时加载新 Diff。
  • 长耗时 Git 写操作及后续状态扫描期间,界面和命令日志保持响应。
  • 文件历史精简为描述、提交、作者和日期四列;双击 Stash 可打开“应用并删除”确认。

2.2.1 · 本地改动追溯与文件历史恢复

  • Blame 支持暂存和未暂存改动:新增行以绿色高亮,删除行以红色高亮,并保留删除行的原始提交信息。
  • 修改内容时先显示旧行,再显示新行;关闭“包含本地改动”后返回打开文件时的快照。
  • 文件历史增量展示,超时或取消后保留已读取的完整结果;重试中断的读取时保留可见历史记录。
  • 为部分克隆的缺失对象补下载提供独立超时预算,允许下载超过普通本地读取时限;读取失败时显示 Git 原始错误信息。

2.2.0 · 仓库文件搜索与忽略规则预览

  • 按文件名或路径查找仓库中的已跟踪文件,包括未修改文件;使用 Command-P 打开搜索器,直接进入 Blame 或文件历史。
  • 为未跟踪文件预览精确路径、扩展名或所在目录的忽略规则;确认后追加到仓库根 .gitignore,不自动暂存。
  • 在文件状态中隐藏未跟踪文件,按仓库保存偏好;保留真实状态计数,并从选择和批量操作中排除隐藏文件。
  • 文件历史动作直接打开历史标签;改进特殊路径处理,关闭搜索器或切换仓库时取消过期搜索。

2.1.0 · 更清晰的逐行暂存与丢弃预览

  • 在统一和并排 Diff 中复制纯代码,不带行号、变更标记或对齐占位;复制 Patch 保留独立入口。
  • 在两种 Diff 布局中选择单行或连续源行,清楚显示整行操作目标,并在已跟踪文本文件的单个完整 Hunk 内暂存或取消暂存。
  • 丢弃选中行或完整 Hunk 前,对照预览当前工作文件与丢弃后的结果;选择替换的一侧不会自动连带丢弃另一侧。
  • 确认丢弃前复检文件、暂存区和比较设置,目标变化时阻断操作;无效行选区不会扩大为整个 Hunk 或文件操作。
  • 优化大型仓库的状态加载,读取期间保持真实 Git 索引不变。

2.0.3 · 分支创建与刷新流畅度优化

  • 从选中的远端分支直接创建本地分支,默认预填同名分支并开启远端跟踪。
  • 将本地分支改为不同名称时,按普通分支创建,不设置远端跟踪;改回同名恢复默认跟踪,仍可手动关闭。
  • 优化大量文件变更时的事件处理,减少界面卡顿。
  • 避免 Git FSMonitor 记账事件引发重复刷新,覆盖关联工作树场景。

2.0.2 · 工作树管理与文件历史优化

  • 关联工作树的本地分支右键新增“移除工作树”,移除后保留分支,可再按需删除。
  • 补齐工作树行、侧栏及分支右键的创建和管理入口,支持复制路径、刷新和移除;保留主工作树、锁定及其他窗口占用保护。
  • 优化文件历史分页,暂停阅读时释放 Git 读取资源,减少其他查询长时间等待。
  • 文件 Diff 复用重命名路径,提交详情只读取元信息,减少切换提交时的重复扫描。
  • 最近打开的仓库支持从记录中移除,不删除本地仓库或文件。
  • 补齐界面缺失的简体中文、繁体中文和英文翻译。
  • 首次更新提示可开启“以后自动检查更新”,与设置页共用偏好。

2.0.1 · 文件历史与代码阅读

  • 文件历史与 Blame 改为可调整大小、支持全屏的独立窗口,更方便阅读代码。
  • 文件默认打开 Blame,列按提交号、描述(作者与提交摘要)、行号和代码排列。
  • 第二个标签为文件历史;选择提交后,先展示该提交对当前文件的改动,再展示提交信息。
  • 文件历史详情只关注当前文件,跨重命名追溯改动,不再显示整个提交的文件列表与数量。
  • 修复 Diff 行首内容被裁切的问题,调整窗口尺寸后仍能完整阅读代码。

2.0.0 · 并行开发与历史恢复

  • 工作树(Worktree):用独立工作目录并行开发多个分支,支持新分支、已有分支和游离 HEAD;可从远端分支开始,并直接在 NanoGit 中打开工作树。
  • Reflog 恢复:查看和搜索 HEAD 或全部可见引用的操作记录,从过去的提交创建恢复分支,保留当前分支、暂存区和工作文件。
  • 历史文件浏览:浏览任意提交中的完整仓库目录,按需展开文件夹,预览历史文本与图片,并打开文件历史或逐行溯源(Blame)。
  • 分支操作更清晰:删除前显示关联工作树,保护正在使用的分支;远端与本地操作部分完成时给出明确提示。
  • 界面与浏览体验:改善窄栏布局、Diff 换行对齐和历史图片比例;文件树刷新保留浏览位置,历史日期筛选更准确。界面与帮助支持英文、简体中文和繁体中文。
查看更早版本(1.7.1–1.3.0)

1.7.1 · 仓库切换与提交图折叠

  • 窗口左上角显示当前仓库,支持打开、克隆、初始化,以及切换置顶和最近仓库;同名仓库通过路径区分。
  • 切换仓库优先激活已打开的窗口,并恢复各自的导航、筛选、选择和分栏位置。
  • 提交图可折叠已合并侧分支,聚焦主线历史;保留合并提交和带引用的提交,显示隐藏数量,支持方向键展开与折叠,并记住每个仓库的折叠状态。

1.6.0 · 工作区与仓库管理

  • 用工作区分组整理仓库,创建、重命名和删除分组,固定常用仓库,移动或移除条目;移除条目不会删除磁盘上的仓库。
  • 按 ⌘⌥O 快速搜索仓库、路径和工作区;仓库列表显示最近观察到的分支、领先与落后提交数、变更数量和时间。
  • 每个仓库独立保存导航、历史筛选、文件与提交选择以及分栏位置,关闭后重新打开仍可恢复。
  • 侧栏分支与标签单击打开对应历史,折叠箭头独立控制展开,双击分支继续支持切换。

1.5.2 · 启动与更新体验

  • 修复启动卡住的问题,保留最近仓库和偏好设置。
  • 官网版开启自动检查后,每次启动和运行期间都会检查更新;发现新版时可选择安装、稍后或跳过。
  • 改善慢网络下的更新提示,没有新版或检查失败时保持安静。

1.5.1 · 大型仓库刷新优化

  • 修复大型仓库频繁刷新时界面持续忙碌或卡住的问题,减少后台刷新带来的页面重绘。
  • 设置与仓库菜单新增全局自动刷新开关;暂停后仍可按 ⌘R 手动刷新,恢复时补做一次刷新。

1.5.0 · 内置冲突编辑器

  • 同时查看共同基线、我方与对方内容,直接编辑最终结果;在冲突间前后导航,一键采用我方或对方内容,再保存并标记为已解决。
  • Rebase 冲突明确显示目标分支与正在重放的提交;保存前检测外部修改,避免覆盖新更改。
  • 保留外部合并工具与原有冲突解决操作,不支持内置编辑的文件会说明原因。

1.4.0 · Patch 导入导出与 Stash

  • 将工作区、暂存区、当前提交文件或选中区块保存或复制为 Patch,支持二进制内容。
  • 从文件或剪贴板导入 Patch,应用前查看大小、受影响文件和检查结果;选择应用到工作区或暂存区,支持反向应用与三方合并。
  • Stash 支持“应用并删除”;切换分支时可自动暂存,在目标分支重新应用,并仅在成功后删除临时 Stash。
  • 改善历史与分支预览的选择状态,修复切换分支后仍显示旧提交的问题。

1.3.0 · 文件历史与逐行溯源

  • 从文件右键菜单打开文件历史,追溯重命名前后的提交。
  • 查看工作区或历史提交的逐行溯源,显示每行作者、日期和提交,选择行查看提交详情。
  • 官网版支持在应用内检查更新,可选择开启自动检查;安装更新会等待正在执行的 Git 写操作结束。