更改列表是与版本控制历史相比,您已更改的一组文件。它与版本控制变更集的不同之处在于,版本控制变更集是在您提交代码时创建的。在您编辑代码时会出现一个 IDEA 更改列表,然后在您提交代码时将其清除。
IDEA 更改列表允许您跟踪所做的更改。您可以快速查看所有有更改的文件(与上次版本控制更新/拉取相比)。它们非常有用,因为您一次创建了多个变更集(但只有一个处于活动状态),并且它们可以链接到任务(即票证或错误跟踪器)。
所以可以说我正在研究“新的搜索功能”。我为此创建了一个更改列表并使其处于活动状态。在我编写代码时,我的所有更改都在该列表中。在我工作时,我得到了 DB Hang 的紧急错误修复。我创建了一个“DB Hang”更改列表并使其处于活动状态。现在我所做的任何更改/编辑都在“DB Hangs”更改列表中。完成后,我只能提交“DB Hangs”更改列表中的文件。这可以防止我在处理(仍然不完整的)“新搜索功能”任务时更改的任何文件。提交“DB Hangs”代码修复后,我将“新搜索功能”更改列表激活并(很可能)删除“DB Hangs”更改列表并继续对新搜索功能进行编码。我个人也有一个“不承诺” 更改列表,我在其中放置了我不想提交给版本控制的任何更改文件(例如,更改配置文件以进行隔离/本地测试)。注意:您可以轻松地将已更改的文件从一个更改列表移动到另一个更改列表。
更新
从 2018.1 版本开始,IntelliJ IDEA 允许文件出现在多个更改列表中。来自宣布新功能的博客:“IDE 现在提供了将代码块(而不是整个文件)与更改列表相关联并单独跟踪它们的能力。可以使用移动到另一个更改列表操作在更改列表之间快速移动代码块可从Commit Changes对话框中Diff窗格的上下文菜单中获得。” 有关更多详细信息和信息,请参阅该博客。
对于 2018.1 之前的版本:
当您有多个更改列表时——例如上面的错误示例——如果您尝试修改活动更改列表上的文件,该文件也在非活动更改列表上,IDEA 会警告您并且文件名会变为红色。例如,假设作为“新搜索功能”的初始工作的一部分,我对“User.java”进行了更改,这取决于我为“新搜索功能”工作创建的许多新文件。然后我得到紧急错误并切换到“DB Hangs”更改列表。在修复该错误时,我意识到我需要对 User.java 进行更改。当我开始编辑文件时,IDEA 警告我它是另一个变更集的一部分。这可以防止我以后在没有它所依赖的新代码的情况下提交 User.java,从而破坏构建。当我收到警告时,我必须决定如何处理它。我可以在编辑 User.java 以修复“DB hangs”之前搁置“新搜索功能”更改列表,然后再将其取消搁置。(当两个修复都需要大量文件时,这通常是最好的做法。)或者,我可以将文件移动到“Db Hangs”更改列表。然后,如果我确定更改可以进行错误修复(即没有其他依赖项),我可以一起提交。或者我可以回滚该文件中的更改。(然后稍后使用本地历史将它们取回)。或者我可以注释掉这些变化。等等。(当两个修复都需要大量文件时,这通常是最好的做法。)或者,我可以将文件移动到“Db Hangs”更改列表。然后,如果我确定更改可以进行错误修复(即没有其他依赖项),我可以一起提交。或者我可以回滚该文件中的更改。(然后稍后使用本地历史将它们取回)。或者我可以注释掉这些变化。等等。(当两个修复都需要大量文件时,这通常是最好的做法。)或者,我可以将文件移动到“Db Hangs”更改列表。然后,如果我确定更改可以进行错误修复(即没有其他依赖项),我可以一起提交。或者我可以回滚该文件中的更改。(然后稍后使用本地历史将它们取回)。或者我可以注释掉这些变化。等等。
(更新结束)
要回答这个问题:
特别是,当我恢复到早期版本(使用 VCS)时,IntelliJ 想要为此创建一个新的更改列表。为什么?在那种情况下,变化将与什么有关?假设我从版本 23 恢复到版本 9。然后更改列表将包含版本 23 和 9 或 8 和 9 之间的更改
当切换到不同的 VCS 版本时,IDEA 只会在您对以前活动的版本进行代码更改时才想创建一个新的更改列表。原因是您所做的代码更改是“对此文件版本 23 的更改”。当您恢复到版本 9 时,这些更改本身不再有效。它假定您要单独跟踪对版本 9 所做的更改。我从来没有遇到过这种情况(基于我使用旧版本或分支的个人工作流程)。但是,如果您想使用在查看版本 23 和版本 9 时所做的更改,您应该能够移动到新的更改列表,或激活原始更改列表。