一、背景
这篇文章研究 idea 中 enable staging area 配置。该配置通常默认不开启,如下图所示。
说明:该选项将 idea 默认的 changelist(变更列表)工作流切换为 git 原生的暂存区(staging area / index)工作流;仅适用于非模态(non-modal)commit 界面。

开启前后有什么差异?
开启enable staging area前
commit 窗口中的未提交文件带有复选框。此时 idea 以 changelist(变更列表)展示本地改动,不会按 git 的 staged 和 unstaged 状态分别显示;可以通过复选框决定本次提交哪些文件。

开启enable staging area后
可以看到:
- 区分了
staged和unstaged,分别对应 git 暂存区(index)中的改动与尚未暂存的工作区改动 - 文件列表不再通过复选框决定提交范围;需要先将要提交的改动加入
staged

二、两者更多的区别
2.1、区分显示后,提交范围由 staged 决定
不能再通过勾选框选择本次提交的文件。staged 为空时,点击 commit all 会将当前所有未暂存改动一并纳入本次提交;因此它不适用于按文件选择性提交。
如果要选择性提交,先将需要提交的文件加入 staged,之后点击 commit。此时 commit 只会提交 staged 中的内容。(注意:当 staged 中有内容时,commit all 按钮会变为 commit,如下图。)
除整个文件外,idea 还支持暂存代码块、单行等更细粒度的改动;因此也可以将同一个文件的不同改动分多次提交。

可以观察到
- 步骤 1:
staged中没有文件,按钮显示为commit all - 步骤 2:选中某个文件,执行
+ stage,将它加入暂存区 - 步骤 3:
staged中出现文件后,commit all变为commit,以避免误以为仍会提交全部改动 - 步骤 4:点击
commit后,staged中的文件已被提交。即使当时蓝色背景选中了test.java(见步骤 3),提交范围也不是“当前选中的文件”,而是staged中的全部内容
其他补充
如果要将 staged 中的文件取消暂存,使用 unstage:它只会撤销暂存状态,不会丢弃工作区中的文件修改。其效果近似于:
git restore --staged <file>
操作如下:

注意:启用该选项会禁用 changelist 支持。如果原先依赖多个 changelist 区分任务,切换前应先确认当前 idea 版本对已有 changelist 的处理方式,并以设置页面的提示为准。
三、其他
前文描述的 “工作区和stage区域的文件分开显示” 如何是如何设置的:
- file -> new projects setup -> settings for new projects… -> version control -> git -> commit 下面有个 enable staging area
- file -> settings… -> version control -> git -> commit 下面有个 enable staging area
上面两种改法都等价, 都是全局生效的, 改其中一个会同步体现在另外一个位置
到此这篇关于关于 idea 里的 enable staging area的文章就介绍到这了,更多相关idea enable staging area内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论