Skip to content

Git 版本管理 ​

在项目工作区打开 Git 页面,可以可视化地管理代码版本。底部有三个标签页:状态、分支、提交。如果当前目录不是 Git 仓库,可一键初始化为空白仓库(默认分支为 main),或输入远程地址直接克隆已有仓库(1.12.0 起)。

右上角的钥匙图标进入「凭据与署名」页,内含署名和凭据两个标签页——首次使用必须先配好署名,否则无法提交。

状态 ​

查看当前仓库的工作区状态。

顶部卡片显示当前分支名、相对远程领先或落后多少个提交(上下箭头),以及已暂存、已修改、未跟踪的文件数量。

提交是全宽的主按钮,需要先暂存改动并配好署名才能点击,点击后填写提交信息。

次级操作一行四个按钮:

  • 暂存全部:把所有改动加入暂存区。
  • 储藏(1.12.0 起):打开储藏箱,见下文「储藏」小节。
  • 拉取 / 推送:需要已配置远程仓库。当前分支没有上游时,推送会自动建立关联。

分组标题右侧还有:

  • 全部取消暂存:在已暂存分组,执行前会二次确认。此操作只取消暂存,不会删除文件内容。
  • 全部回退(1.11.0 起):在已修改分组,把所有未暂存的改动还原成上次暂存或提交的内容。已暂存的内容不受影响,但丢弃掉的改动无法找回,执行前会二次确认。

文件改动按「已暂存 / 已修改 / 未跟踪」分成三组:

  • 已暂存:点行查看暂存区与上次提交的差异,行尾「−」取消暂存。
  • 已修改:点行查看工作区与上次提交的差异,行尾「+」暂存该文件。被删除的文件也在这一组,状态徽标是红色的 D。
  • 未跟踪:点行查看这个新文件的内容(整份按新增显示),行尾「+」暂存。git 会把新建的目录折叠成一行(如 feature/),点它展开里面的文件,再点单个文件即可查看内容。

如果工作区有未提交的改动,点「拉取」会先提示可能产生冲突,确认后才执行。

提交弹窗(1.12.0 起增强) ​

点「提交更改」弹出的窗口里:

  • AI 生成:点标题栏右侧的按钮,让 AI 读取暂存区与工作区的差异,自动生成一条符合 Conventional Commits 的提交信息。生成期间按钮显示「正在生成…」,生成失败会提示检查模型或网络。
  • 快捷类型:输入框上方一排 Chip(feat、fix、refactor、chore、docs、style、perf、test),点一下即把对应前缀套到当前信息上。
  • 追加到上次提交(--amend):底部开关,开启后这次提交会合并进上一次提交,而不是新建一条。

合并冲突(1.12.0 起) ​

合并分支后如果产生冲突,状态页顶部会显示「检测到合并冲突」,并单独列出冲突文件(状态徽标为紫红色 U),提示你在编辑器中解决冲突后暂存,或点「中止合并」放弃本次合并、还原到合并前的状态。

储藏(1.12.0 起) ​

储藏用于临时收起当前改动、让工作区回到干净状态,之后再取回来。点状态页的「储藏」按钮打开储藏箱:

  • 储藏改动:可填一句可选说明,并可勾选「包含未跟踪文件(-u)」把新文件也一并收起。
  • 弹出 (Pop):取出这条储藏并把它从储藏列表移除。
  • 应用 (Apply):取出内容但保留这条储藏记录。
  • 丢弃 (Drop):删除单条储藏,执行前二次确认。
  • 清空全部:删除所有储藏,执行前二次确认。

丢弃与清空都不可撤销。

回退与删除(1.11.0 起) ​

版本说明

状态页的长按操作菜单(回退改动、恢复文件、删除未跟踪项)与「全部回退」从 1.11.0 起提供;菜单里的「添加到 .gitignore」从 1.12.0 起提供。

长按任意文件行会从底部弹出操作菜单,菜单顶部显示完整路径。可用的操作按文件所在分组不同:

分组菜单项
冲突文件查看差异、暂存、复制路径
已暂存查看差异、回退改动(还原到上次提交,已暂存和未暂存的改动都会丢失)、复制路径
已修改查看差异、回退改动(还原成上次暂存或提交的内容)、复制路径
已修改中被删除的文件查看差异、恢复文件(从上次提交把文件取回来)、复制路径
未跟踪文件查看差异、添加到 .gitignore(忽略此文件 / 忽略同类型文件)、删除文件、复制路径
未跟踪目录添加到 .gitignore(忽略整个目录)、删除目录、复制路径

两类操作的后果完全不同,注意区分:

  • 回退改动 / 恢复文件:针对 Git 已经跟踪过的文件。内容存在版本库里,因此无论文件是被你删的、还是被终端命令或 AI 删的,都能取回来。代价是这次没提交的改动会丢失。
  • 删除文件 / 删除目录:只出现在未跟踪项上。这些文件从来没进过版本库,删除后 Git 无法恢复。

所有回退和删除操作执行前都会弹确认框,说明将丢失什么。

分支 ​

分成 HEAD、本地分支、远程分支、标签四组显示。当前分支卡片会显示分支名和三类引用的数量。本地分支按路径树形展示,当前分支高亮。

切换分支:点任意分支或标签,确认后切换。点远程分支会创建一个本地跟踪分支再切过去。切换到标签会进入 detached HEAD 状态(此时的提交不属于任何分支,注意不要在该状态下长期工作)。

点分支行弹出操作菜单:

  • 切换:切到该分支。
  • 合并分支(1.12.0 起):把该分支合并到当前分支,确认框里可选「创建合并提交(--no-ff)」。当前分支自身不显示这一项。
  • 重命名:改本地分支名。
  • 删除:本地分支使用安全删除,只能删已合并的分支;未合并的分支会被拒绝并给出原因。远程分支的删除会直接作用到远端,不可撤销。当前所在的分支不能删除。

新建分支:点本地分支分组标题右侧的 +,填分支名、选基准分支(默认当前分支),「创建并切换」开关默认开启。

标签:点标签分组标题右侧的 + 从当前 HEAD 创建轻量标签;点已有标签 → 操作菜单 → 删除可以删本地标签。

首次推送 master 分支的命名建议(1.12.0 起) ​

如果当前本地分支叫 master 且还没建立上游,第一次推送时会弹窗建议重命名为 main(GitHub、GitLab 的默认主分支)。可以选择「重命名为 main 并推送」,或「保留 master 推送」。

提交 ​

显示最近的提交,带彩色的分支拓扑图。每条显示短哈希、作者、相对时间、提交信息,以及所在分支或标签的标记。

搜索过滤(1.12.0 起):列表上方有搜索框,输入关键词即可按提交说明、作者或短哈希实时筛选。

点一条提交会弹出底部详情面板:完整提交信息、作者与时间、完整哈希(短哈希和完整哈希都可以复制)、是否是合并提交,以及这次改动的文件清单。点文件可以查看该文件的差异。

详情面板上方还有一排深度操作(1.12.0 起):

  • 分支:基于这条提交新建分支并切换过去。
  • 标签:在这条提交上打标签。
  • Reset:把当前分支重置到这条提交,可选 Soft(保留工作区与暂存区)或 Mixed(保留工作区,清空暂存区)。

往下滚动接近底部时会自动加载更早的提交,全部加载完会显示「没有更多了」。

差异视图 ​

点文件或提交查看差异时进入独立的差异页:

  • 差异按带行号的 + / − 彩色显示,顶栏可以在编辑器中打开该文件(1.12.0 起),直接跳到代码编辑器对应文件。
  • 单侧文件超过 2MB 时直接提示「文件过大」,不展示内容(二进制文件同理)。

超大输出 ​

为保护手机内存,Git 页面不会将超大内容完整读入:状态、分支、提交列表等读取 git 输出超过上限时,会提示「输出过大,已截断,请缩小范围后重试」,不再尝试加载。

常见错误提示 ​

操作失败时 Git 的原始报错会被翻译成中文提示。若某条错误没有对应翻译,会直接展示 Git 原文,方便排查。

场景提示
当前目录不是仓库当前目录不是 Git 仓库
仓库所有者异常Git 检测到仓库目录所有者异常(常见于外部存储),无法安全操作
仓库被占用 / 残留锁文件仓库正被其他 Git 操作占用,请稍后重试
索引损坏Git 索引文件已损坏,请关闭后重新打开仓库
磁盘写入失败无法写入仓库文件,请检查存储权限或剩余空间
删除当前所在分支无法删除当前所在分支,请先切换到其他分支
删除有未合并提交的分支该分支有未合并的提交,无法安全删除
新建分支重名同名分支已存在
分支名不合法分支名不合法
新建标签重名同名标签已存在
删除不存在的标签标签不存在
切换到不存在的分支/引用分支、标签或提交不存在
操作的路径不存在指定的文件或路径不存在
未跟踪文件会被覆盖存在会被覆盖的未跟踪文件,请先移动或删除后再继续
切换时本地改动会被覆盖本地有未提交的改动会被覆盖,请先提交或储藏后再切换分支
处于分离头指针状态当前处于分离头指针状态,无法执行该操作,请先切换到某个分支
合并冲突合并产生冲突,请前往状态页查看并解决冲突
存在未解决的冲突存在未解决的冲突,请先解决冲突或中止合并
无共同历史两个分支没有共同历史,无法合并
目标无法合并无法合并:目标不是有效的分支或提交
无法快进无法快进合并,存在分叉的提交,请改用普通合并
合并时本地有改动本地有未提交的改动,请先提交或储藏(Stash)后再合并
未配置提交署名尚未配置提交署名,请在设置中填写用户名和邮箱
无可提交改动没有需要提交的改动
提交信息为空提交信息不能为空
冲突未解决时提交合并冲突尚未解决,无法提交
分支未关联远程当前分支未关联远程分支,无法拉取
未指定拉取分支未指定要拉取的远程分支
未配置远程仓库未配置远程仓库,无法推送
本地无可推送提交本地没有可推送的提交
本地与远程分叉本地与远程分支已分叉,请先拉取合并或变基后再推送
推送被拒(远程有更新)推送被拒绝,远程有更新的提交,请先拉取
推送被远程拒绝远程拒绝了本次推送,可能受分支保护或权限限制
远程分支不存在远程分支不存在
远程仓库不可用远程仓库不可用或无访问权限
远程鉴权失败远程鉴权失败,请检查凭据配置(用户名/密码/Token)
远程仓库不存在远程仓库不存在或无访问权限
域名解析失败无法解析远程主机地址,请检查网络或代理
连接失败或超时连接远程仓库失败或超时,请检查网络或代理
连接中断与远程仓库的连接中断
证书/TLS 失败安全连接建立失败(服务器证书校验或 TLS 握手失败)
克隆目录非空当前工作区目录非空,无法直接克隆到当前目录
无改动可储藏当前没有需要储藏的改动

基于 GPL-3.0 协议开源