跳转到主要内容
OpenIDEA 内置 Git 支持,Git 也是它唯一支持的版本控制系统。 仓库状态(状态、差异、Blame、日志)在进程内读取;所有修改仓库的操作都调用 git 可执行文件完成,因此钩子、凭据、签名和你的 Git 配置都和命令行下的行为一致。你需要先安装 Git。OpenIDEA 依次在 OPENIDEA_GIT、PATH 和常见安装位置中查找;也可以在 设置 › 版本控制 › Git › Git 可执行文件路径 中指定路径,并点击 测试 检查。

功能入口

使用 Git Blame 注解、显示 Git 日志、显示历史记录、拉取…、获取、合并…、变基…、贮藏更改… 和 解决冲突… 没有默认快捷键,常用的话可以在键位映射中自行分配。

获取仓库

  • Git › 克隆… 打开 克隆仓库。填写 URL: 和 目录:,需要时勾选 浅克隆,历史记录截断为 N 个提交。侧栏中的 GitHub 会列出你的 GitHub 仓库(见 GitHub)。
  • 新建项目时,在新建项目对话框中勾选 创建 Git 仓库。
对已经打开的项目,没有执行 git init 的操作;在终端中执行后 OpenIDEA 会自动识别仓库。 OpenIDEA 会找到包含项目的仓库,以及向下最多四层的嵌套仓库(跳过 node_modules、target、build 等目录)。状态、提交、获取和更新覆盖所有仓库;分支和日志操作针对所选仓库。子模块显示为嵌套仓库,但没有子模块相关命令。

提交更改

提交 工具窗口按组列出更改:合并冲突、更改(每个更改列表一组)和 未跟踪的文件。选择 视图选项 › 分组依据 › 暂存状态 后,更改会分为 已暂存的更改 和 未暂存的更改。
1

选择要提交的内容

勾选要包含的文件。未跟踪的文件和冲突默认不勾选,并且只勾选活动更改列表中的更改。Space 切换所选项。部分暂存的文件只包含已暂存的代码块。
2

填写提交消息

在消息框中输入。提交消息历史记录 按钮(或 ⌃M / Ctrl+M)提供最近 20 条消息。合并、拣选或还原过程中,消息会从 Git 预先填入;其他情况下使用 commit.template。
3

提交

点击 提交,或在消息框中按 ⌘Enter / Ctrl+Enter。提交并推送…(在消息框中按 ⌥⌘Enter / Ctrl+Alt+Enter)会在提交后推送。
勾选 修改(⌃⌥M / Alt+M)可以修正上一次提交,按钮会变为 修正提交。 双击文件(或按 Enter)查看差异;预览差异 会在树旁边直接显示。文件右键菜单包括 显示差异、跳转到源代码、回滚…、添加到 VCS、添加到 .gitignore、暂存、取消暂存、移动到其他更改列表…、搁置更改…、创建补丁…、以补丁形式复制到剪贴板、显示历史记录、显示本地历史记录 和 使用 Git Blame 注解。

部分提交

只想提交文件的一部分时,从提交工具窗口打开它的差异。每个变更块在边栏中都有 包含在提交中 复选框,取消勾选不想提交的块即可,树中该文件的复选框会变为部分选中。OpenIDEA 通过临时索引提交选中的块,工作区和暂存区都保持不变。选择粒度是代码块,不是单行。 习惯使用暂存区的话,差异工具栏里也有 暂存更改 (git add hunk)。

更改列表

更改列表用来给本地更改分组,不影响 Git。默认列表名为 更改,新的更改进入活动列表。更改列表按项目保存在 .openidea/changelists.json 中。
  • 新建更改列表…、编辑更改列表…(F2 或 ⇧F6 / Shift+F6)、删除更改列表、设置活动更改列表。
  • 移动到其他更改列表…(⇧⌘M / Alt+Shift+M),或者直接在列表之间拖动文件。
  • 右键某个更改列表选择 提交…,只提交这个列表。

提交选项与检查

提交 按钮旁的齿轮按钮(提交选项)包含:
  • 作者::以其他身份提交(Name <email>),以及 签署提交。
  • 提交检查:重新格式化代码、优化导入、清理(应用 fix-all 代码操作)和 运行 Git 钩子(关闭时加 --no-verify)。
  • 高级提交检查:分析代码(语言服务器报告的错误和警告)和 检查 TODO(新增行中的 TODO 和 FIXME)。
提交前,OpenIDEA 还会对以下情况发出警告:在分离 HEAD 或变基过程中提交、文件名在其他系统上可能有问题、文件大于 50 MB、CRLF 换行符。出现警告时第一次提交会被拦下,点击 仍然提交 继续。没有“运行测试”这一检查。

模态提交

在 设置 › 版本控制 › 提交 中关闭 使用非模态提交界面 后,就没有提交工具窗口了:本地更改、搁置 和 贮藏 变成 Git 工具窗口的标签页,提交… 会打开 提交更改 对话框。

编辑器中的更改标记

编辑器边栏会标出相对于 HEAD 新增、修改和删除的行。点击标记会弹出窗口,提供 上一个更改、下一个更改、回滚、显示差异 和 复制原始文本。光标位于已更改的行上时执行 回滚…,只回滚这些行。

回滚、添加与忽略

  • 回滚… 打开 回滚更改:选择文件,可选 删除已添加文件的本地副本。
  • 添加到 VCS 添加未跟踪的文件。新建或删除文件时,OpenIDEA 会询问是否在 Git 中添加或删除;可在 设置 › 版本控制 › 确认 中修改。
  • 添加到 .gitignore 把规则写入最近的 .gitignore 或 .git/info/exclude。

差异查看器

差异在编辑器标签页中打开。 工具栏可以在 并排查看器 和 统一查看器 之间切换,并设置空白处理(不忽略、修剪空白、忽略空白、忽略空白和空行)、高亮方式(按词、按行或不高亮)、折叠未更改的片段、同步滚动 和 对齐更改。右侧是工作区文件时可以直接编辑,也可以 还原更改 或 暂存更改 (git add hunk)。边栏中的箭头可以把一侧的更改应用到另一侧。 其他比较方式:
  • 对当前文件或文件夹使用 与分支或修订比较… 和 与修订版比较…(文件夹会显示变更文件列表)。
  • 比较对象…(在项目视图中按 ⌘D / Ctrl+D)、比较文件、比较目录(可向左/向右复制)和 视图 › 与剪贴板比较。

分支

点击标题栏的分支微件(或 Git › 分支…)打开分支弹窗,输入文字即可搜索分支和操作。弹窗中有 最近、本地、远程 和 标签 分组,顶部有 更新项目…、提交…、推送…、新建分支… 和 签出标签或修订…。齿轮按钮可以切换按前缀分组、显示最近分支和显示标签。 选中分支(→ 或 Enter)查看它的操作:
  • 签出、从 ’…’ 新建分支…、签出并变基到 ’…’
  • 与 ’…’ 比较、显示与工作树的差异、显示历史记录
  • 将 ’…’ 变基到 ’…’、将 ’…’ 合并到 ’…’;远程分支还有 使用变基拉取到 ’…’ / 使用合并拉取到 ’…’
  • 更新、推送…、重命名…、添加到收藏夹、删除
如果本地更改阻止签出,可以选择 智能签出(贮藏、签出、再恢复)、强制签出 或 不签出。删除的分支可以通过通知中的 恢复 找回。 有多个仓库时,弹窗会显示所有仓库共有的分支,以及每个仓库各自的子菜单。

与远程同步

  • 获取 会获取所有仓库。OpenIDEA 还会在后台检查传入的提交(打开项目 20 秒后检查一次,之后每 15 分钟一次),见 Git 设置中的 显式检查远程上的传入提交。
  • 更新项目…(⌘T / Ctrl+T)以合并或变基方式拉取所有仓库,未提交的更改会先贮藏再恢复。只有开启 更新前显示选项 时才会显示 更新项目 对话框。
  • 拉取… 把选定的远程分支拉取到当前分支,可选 --rebase、--ff-only、--no-ff、--squash 等选项。
  • 推送…(⇧⌘K / Ctrl+Shift+K)列出待推送的提交及其文件。可以修改目标分支、选择远程,并选择 强制 (with lease)、设置上游 或推送标签。受保护分支(默认 master; main)禁止强制推送。推送被拒绝时,OpenIDEA 会提供合并或变基后重新推送。
  • 管理远程… 添加、编辑和删除远程。
HTTPS 密码和 SSH 口令通过对话框询问,可以选择记住;保存的 HTTPS 凭据列在 设置 › 版本控制 › Git › 密码 中。

合并、变基与冲突

Git › 合并… 和 Git › 变基… 打开对话框,提供常用的 Git 选项(--no-ff、--ff-only、--squash、--no-commit;--onto、--rebase-merges、--keep-empty)。合并、变基、拣选或还原进行中时,标题栏会显示一个微件,提供 解决冲突… 以及继续 / 中止;Git 菜单中的 中止合并、继续变基、跳过提交、中止变基 以及拣选、还原对应的操作也会变为可用。合并通过提交来完成。 出现冲突时,通知和 冲突 对话框会列出相关文件。对每个文件选择 接受您的、接受他们的 或 合并…。 合并… 打开三方合并编辑器:左侧是你的版本,中间是结果,右侧是他们的版本。
  • 点击边栏中的箭头接受某处更改,点叉号忽略它。按住修饰键可以用某一侧解决整个冲突。
  • 工具栏可以应用所有不冲突的更改(左侧、右侧或两侧)、解决简单冲突、任意比较其中两个版本,并显示剩余的更改和冲突数。
  • 点击 应用 保存结果并标记为已解决,或者对整个文件选择 接受您的 / 接受他们的。
带冲突标记的文件顶部会显示横幅和 解决冲突…,冲突标记也会作为错误报告。在文本编辑器中,接受您的(光标处的冲突)、接受他们的(光标处的冲突)、全部接受(光标处的冲突) 可以逐个解决冲突。

Git 日志

Git 工具窗口的 日志 标签页显示提交图。
  • 过滤:文本或哈希(支持正则和区分大小写)、分支、用户、日期和路径;最近使用的过滤条件 可以找回之前的过滤。
  • 转到哈希/分支/标签(在日志中按 ⌘F / Ctrl+F)。
  • 图形选项:按日期、拓扑或传入优先排序;仅第一父提交;不显示合并提交。
  • 视图选项:引用显示方式、详情面板,以及列(作者、日期、哈希、签名、GitHub 提交检查)。
  • 左侧的分支面板可以按分支过滤日志,并提供分支操作。
  • 详情面板显示变更文件、提交消息、提交者、包含该提交的分支以及签名。
右键提交可以选择 复制修订号(⌥⇧⌘C / Ctrl+Alt+Shift+C)、创建补丁…、拣选、签出修订、浏览此修订版本的仓库、与本地比较、将当前分支重置到此处…、还原提交、撤消提交…、新建分支…、新建标签…、在浏览器中查看 等。选中两个提交时,比较版本 会比较它们。

改写历史

在日志中可以 编辑提交消息…、修补提交…、压缩到…、丢弃提交、压缩提交… 和 从此处进行交互式变基…。交互式变基对话框可以对提交执行 pick、reword、edit、squash、fixup、drop,并调整顺序。已推送的提交不能使用这些操作。 限制:交互式变基不支持包含合并提交的范围;撤消提交… 只能用于最新的提交(其更改会放回某个更改列表)。

标签、重置与工作树

  • Git › 新建标签… 在某个提交上创建标签(填写消息时为附注标签)。日志中的 新建标签… 创建轻量标签。
  • Git › 重置 HEAD… 和 将当前分支重置到此处… 支持 软、混合(默认)、硬 和 保留 四种模式。
  • Git › 新建工作树… 和 工作树… 用于创建、列出、删除工作树,以及在新窗口中打开。

贮藏、搁置与补丁

贮藏 使用 git stash:
  • 贮藏更改…:填写消息,可选 保留索引 和 包括未跟踪的文件。贮藏总是包含全部更改,不能只贮藏部分文件。
  • 取消贮藏更改…:应用或弹出某个贮藏,恢复索引,或基于它新建分支。
  • 提交工具窗口的 贮藏 标签页列出所有贮藏,可以应用、弹出和删除。
搁置 由 IDE 管理,以补丁形式保存在 .openidea/shelf 中:
  • 搁置更改…:选择文件并命名,之后这些更改会被还原。
  • 取消搁置…:以三方合并的方式把搁置(或其中某个文件)应用到你选择的更改列表。
  • 搁置 标签页列出所有搁置,支持查看差异、与本地比较、导出补丁、重命名和删除。
在 Git 设置中打开 在同一个标签页中合并显示贮藏和搁置,两者会显示在同一个标签页里。 Git › 补丁 包含 创建补丁…、应用补丁… 和 从剪贴板应用补丁…。

Blame 与历史

  • 使用 Git Blame 注解 在边栏中逐行显示作者和日期(也可以从边栏右键菜单打开)。点击某条记录会在日志中打开对应提交。在 Git 设置中打开 为当前行显示内联 Git Blame,会在光标所在行末尾显示作者。
  • 显示历史记录 在 Git 工具窗口的标签页中打开文件历史。
  • 显示所选内容的历史记录 列出修改过所选行的提交。
  • 显示当前修订版 在日志中定位光标所在行的提交。

本地历史记录

本地历史记录独立于 Git 保存文件快照,包括已删除的文件,以及重构前自动记录的状态等带标签的快照。
  • Git › 当前文件 › 本地历史记录(或项目视图中的 本地历史记录 › 显示历史记录)打开文件或文件夹的历史。选中某个版本后点击 还原(已删除的文件为 恢复)。
  • 添加标签… 给当前状态打标记。
  • 最近的更改(⌥⇧C / Alt+Shift+C)列出整个项目最近的编辑。
保留策略在 设置 › 外观与行为 › 系统设置 的 本地历史记录 部分设置:默认保留 5 个工作日、每个项目 512 MB。超过 2 MB 的文件不会自动保存快照。

设置

设置 › 版本控制 包含以下页面:

暂不支持

  • Mercurial、Subversion、Perforce 等其他版本控制系统。
  • 对已打开的项目执行 git init、子模块命令、编辑目录映射。
  • 按行的部分提交(只支持按代码块)以及按文件贮藏。
  • 除大文件警告外的 Git LFS 支持。