审查变更
最后修改时间:2023 年 10 月 18 日本主题说明如何跟踪您和您的团队成员对源代码所做的更改。
回顾项目历史
PyCharm 允许您查看对与指定过滤器匹配的项目源所做的所有更改。
对于分布式版本控制系统,例如 Git 和 Mercurial,您可以在 版本控制工具窗口 的日志选项卡 中查看项目历史记录(请参阅调查 Git 存储库中的更改)。Alt09
对于集中式版本控制系统,例如 Subversion、Perforce 和 ClearCase,项目历史记录可在版本控制工具窗口 的 存储库选项卡中找到。Alt09
在编辑器中跟踪文件的更改
当您修改受版本控制的文件时,所有更改都会在编辑器中突出显示,并带有更改标记,这些标记出现在修改行旁边的装订线中,并显示自上次与存储库同步以来引入的更改类型。当您将修改后的文件提交到存储库时,更改标记就会消失。
您对文本所做的更改是用颜色编码的:
提示
您可以在编辑器 |上自定义线路状态的默认颜色。配色方案| IDE 设置的 VCS页面。CtrlAlt0S
要禁用装订线中的 VCS 标记,请取消选择“版本控制”|“装订线”中的“突出显示装订线中已修改的行”选项。IDE 设置的 确认页面。CtrlAlt0S
您可以使用专用工具栏管理更改。要调用它,请将鼠标悬停在更改标记上,然后单击它。工具栏与一个框架一起显示,该框架显示修改行的先前内容:
工具栏中的操作可让您导航到下一个或上一个更改、回滚更改、查看当前版本与存储库版本之间的差异、将修改行的先前版本复制到剪贴板,或者打开突出显示代码中的差异。
如果要关闭突出显示更改,请取消选中版本控制 |上的突出显示装订线中修改的行选项。IDE 设置的 确认页面。CtrlAlt0S
将本地更改与存储库版本进行比较
除了在编辑器中浏览文件中的本地更改之外,您还可以将这些更改与文件的基本修订版进行比较。
要预览差异,请在“提交”工具窗口中选择修改后的文件,然后单击工具栏上的 。
左侧窗格显示基本修订版中受影响的代码,右侧页面显示您在本地进行更改后受影响的代码。
使用工具栏按钮和控件在更改之间导航并配置更改详细信息窗格或差异查看器的外观:
物品 | 工具提示和快捷方式 | 描述 |
---|---|---|
/ | 上一个差异/下一个差异ShiftF7 F7 | 跳转到下一个或上一个差异。 当达到最后一个或第一个差异时,PyCharm 建议单击箭头按钮或再次按/并比较本地修改的其他文件。此行为取决于“差异查看器”设置中的“到达最后一次更改后转到下一个文件”选项。F7ShiftF7 |
跳转至源代码 F4 | 在编辑器中打开选定的文件。插入符号的位置与差异查看器中的位置相同。 | |
比较上一个/下一个文件 Alt0←Alt0→ | 将上一个或下一个文件的本地副本与其来自服务器的更新进行比较。
| |
转到已更改的文件Ctrl0N | 显示当前更改集中所有已更改的文件并导航到它们。仅当您查看对多个文件的更改时,此操作才可用。 | |
观众 | 选择查看器模式:并排或统一。并排模式有两个面板,统一模式有一个面板。 您可以在两个查看器中编辑代码并执行Accept、Append、Revert操作。 您只能更改并排查看器的右侧部分或统一查看器的下一行中的文本。 您只能编辑文件的本地版本。您无法编辑具有只读状态的文件。 | |
空白 | 定义差异查看器应如何处理空格。
| |
突出显示模式 | 选择突出显示差异粒度的方式。 可用的选项有:
| |
折叠未更改的片段 | 折叠两个文件中所有未更改的片段。不可折叠的未更改行的数量可在“差异和合并”设置页面上进行配置。要打开“差异和合并”页面,请按打开设置,然后导航到“工具”|“ 差异与合并。CtrlAlt0S | |
同步滚动 | 单击此按钮可同时滚动两个差异窗格。如果释放此按钮,每个窗格都可以独立滚动。 | |
设置 | 打开可用设置的列表。 也可以从差异查看器装订线的上下文菜单中使用这些命令。 | |
在外部工具中显示差异 | 调用外部差异工具设置页面上指定的外部差异查看器。 仅当在外部比较工具设置页面上启用使用外部比较工具选项时,此按钮才在工具栏上可用。 | |
帮助 F1 | 打开浏览器并显示相应的帮助页面。 | |
使用 GitBlame 进行注释 | 此选项只能从装订线的上下文菜单中使用。 使用此选项可以探索谁对文件的存储库版本进行了哪些更改以及何时进行。通过注释视图,您可以查看每行代码的详细信息,例如该行源自的版本、提交该行的用户的 ID 以及提交日期。 有关注释的更多信息,请参阅VCS 注释。 |
最有用的快捷键如下:
捷径 | 描述 |
---|---|
CtrlShift0D | 使用此键盘快捷键可显示最常用的 diff 命令的弹出菜单。 |
CtrlShiftTab | 使用此键盘快捷键可在左窗格和右窗格之间切换。 |
Ctrl0Z/CtrlShift0Z | 使用此键盘快捷键可撤消/重做合并操作。冲突将与文本保持同步。 |
查看文件或选择的更改历史记录
PyCharm 允许您查看对文件甚至源代码片段所做的更改。“显示历史记录”和“显示选择历史记录”命令可从VCS主菜单和文件的上下文菜单中使用。
文件的更改历史记录显示在版本控制工具窗口 的 专用历史记录选项卡中。Alt09
所选代码的更改历史记录以差异查看器的形式显示在单独的窗口中。
查看文件历史记录
在编辑器中打开文件或在项目工具窗口中选择它并选择<VCS> | 从上下文菜单中显示历史记录。
所选文件的 “历史记录”选项卡出现在版本控制工具窗口 中,文件名显示在选项卡的标题栏上。Alt09
您可以使用工具栏按钮将所选版本与本地版本进行比较、比较所选版本中的类、从 VCS 中检出所选版本、注释所选版本等:
物品 | 工具提示和快捷方式 | 描述 |
---|---|---|
刷新 | 单击此按钮可刷新当前信息。 | |
显示差异 Ctrl0D | 单击此按钮可将文件的选定版本与差异查看器中的先前版本进行比较。 | |
显示所有受影响的文件 AltShift0A | 单击此按钮可打开“修订版中受影响的路径”对话框,您可以在其中查看在选定修订版中修改的所有文件。 | |
显示所有分行 | 单击此按钮可显示当前分支以外的分支的更改。 | |
演示设置 | 单击以选择您想要在“历史记录”视图中查看的信息量。如果您希望 PyCharm 显示提交时间戳而不是创作更改的时间,您还可以选择“显示提交时间戳”选项。 | |
配置布局 | 单击以选择您要查看的信息类型:
| |
在 GitHub 中打开 | 单击此按钮可打开与GitHub上所选提交对应的页面。 |
查看选择的历史记录
在编辑器中,选择必要的源代码片段或将插入符号放在相应的行上。
选择<VCS> | 从主VCS菜单或选择的上下文菜单显示选择的历史记录。
所选片段的历史记录将在单独的窗口中打开。如果未选择任何内容,将显示当前行的历史记录。
检查文件状态
PyCharm 允许您检查项目文件相对于存储库的状态。文件状态显示自上次与存储库同步以来已对文件执行了哪些操作。
您可以通过用于突出显示文件名的颜色在任何界面元素(例如编辑器或工具窗口)中检查文件的状态。
您可以在“颜色和字体”设置页面中自定义文件状态的默认颜色。
您可以在版本控制 |配置 VCS 文件状态颜色 IDE 设置的 文件状态颜色页面。CtrlAlt0S
提示
要同时突出显示包含已修改内容的文件夹,请在版本控制 | 项目树中选择突出显示包含已修改文件的目录。IDE 设置的 确认页面。CtrlAlt0S
下表列出了默认文件状态颜色及其在某些配色方案中的含义。
颜色 | 文件状态 | 描述 |
---|---|---|
#0A7700 | 添加 | 活动变更列表中的文件计划添加到存储库中。 |
#0EAA00 | 添加到非活动变更列表中 | 非活动更改列表中的文件计划添加到存储库中。如果在“设置”| “突出显示非活动更改列表中的文件”选项已启用,则此文件状态可用。版本控制 | 变更列表。 |
#FF0000 | 变更列表冲突 | 非活动变更列表中的文件已在活动变更列表中被修改。在这种情况下,将打开一个新对话框,提示您解决更改列表冲突。如果在“设置”|“设置”中启用了所有选项,则此文件状态可用。版本控制 | 变更列表。 |
#0A7700 | 已复制 | 如果一个文件是另一个文件的副本,则会跟踪其元数据,并将此类文件标记为已复制。 |
#616161 | 已删除 | 该文件计划从存储库中删除。 |
#773895 | 从文件系统中删除 | 该文件已在本地删除,但尚未计划删除,并且仍然存在于存储库中。 |
#8AA4C8 | 改变了后代 | 如果文件被修改,IDE 将递归突出显示包含该文件的所有目录。如果在“设置”| “项目树”中启用“突出显示项目树中包含已修改文件的目录”选项,则此状态可用。版本控制 | 确认。 |
#3264B4 | 立即改变孩子 | 如果文件被修改,IDE 将突出显示其父目录。如果在“设置”| “项目树”中启用“突出显示项目树中包含已修改文件的目录”选项,则此状态可用。版本控制 | 确认。 |
#B28C00 | 被劫持 | [Perforce、ClearCase、VSS] 文件被修改但未签出。 |
#727238 | 被忽略 | VCS 故意取消跟踪文件。 |
第7503章 DC | 合并 | 作为更新的结果,该文件由您的 VCS 合并。 |
#FF0000 | 与冲突合并 | 在上次更新期间,该文件已合并并存在冲突。 |
#FF0000 | 合并财产冲突 | 在上次更新期间,IDE 检测到本地文件的属性与其服务器版本之间存在差异。 |
#FF0000 | 合并文本和属性冲突 | 当两个或多个开发人员修改文件的相同行和相同的文件属性时,就会发生文本和属性冲突。 |
#0032A0 | 修改的 | 自上次同步以来该文件已更改。 |
#0047E4 | 在非活动变更列表中修改 | 非活动更改列表中的文件已被修改。如果在“设置”| “突出显示非活动更改列表中的文件”选项已启用,则此文件状态可用。版本控制 | 变更列表。 |
#7C7C00 | 过时的 | 该文件不应再位于存储库的工作副本中。 |
#007C7C | 更名 | 自上次更新以来,该文件已被重命名。 |
#08978F | 已切换 | [SVN] 该文件取自与整个项目不同的分支。 |
#993300 | (未知)未版本化 | 该文件存在于本地,但不在存储库中,并且未计划添加。 |
无(默认颜色) | 最新 | 该文件尚未更改。 |
颜色 | 文件状态 | 描述 |
---|---|---|
#629755 | 添加 | 活动变更列表中的文件计划添加到存储库中。 |
#629755 | 添加到非活动变更列表中 | The file in an inactive changelist is scheduled for addition to the repository. This file status is available if the Highlight files from non-active changelists option is enabled in Settings | Version Control | Changelists. |
#D5756C | Changelist conflict | The file in an inactive changelist has been modified in the active changelist. In this case, a new dialog will open, prompting you to resolve the changelist conflict. This file status is available if all options are enabled in Settings | Version Control | Changelists. |
#0A7700 | Copied | If a file is a copy of another file, its metadata is tracked, and such a file is marked as copied. |
#6C6C6C | Deleted | The file is scheduled for deletion from the repository. |
#6C6C6C | Deleted from file system | The file has been deleted locally but hasn't been scheduled for deletion, and it still exists in the repository. |
#6897BB | Have changed descendants | If a file is modified, the IDE will recursively highlight all directories containing that file. This status is available if the Highlight directories that contain modified files in the Project tree option is enabled in Settings | Version Control | Confirmation. |
#6897BB | Have immediate changed children | If a file is modified, the IDE will highlight its parent directory. This status is available if the Highlight directories that contain modified files in the Project tree option is enabled in Settings | Version Control | Confirmation. |
None (default color) | Hijacked | [Perforce, ClearCase, VSS] The file is modified without checkout. |
#848504 | Ignored | A file is intentionally untracked by VCS. |
#9876AA | Merged | The file is merged by your VCS as a result of an update. |
#D5756C | Merged with conflicts | During the last update, the file has been merged with conflicts. |
#D5756C | Merged with property conflicts | During the last update, the IDE has detected differences between the properties of the local file and its server version. |
#D5756C | Merged with text and property conflicts | Text and property conflicts happen when two or more developers modify the same lines of a file and the same file properties. |
#6897BB | Modified | The file has changed since the last synchronization. |
#6897BB | Modified in not active changelist | The file in an inactive changelist has been modified. This file status is available if the Highlight files from non-active changelists option is enabled in Settings | Version Control | Changelists. |
None (default color) | Obsolete | The file should no longer be in your working copy of the repository. |
#3A8484 | Renamed | Since the last update, the file has been renamed. |
None (default color) | Switched | [SVN] The file is taken from a different branch than the whole project. |
#D1675A | (Unknown) Unversioned | The file exists locally but is not in the repository and is not scheduled for addition. |
None (default color) | Up to date | The file hasn't been changed. |
Color | File Status | Description |
---|---|---|
#62CC47 | Added | The file in the active changelist is scheduled for addition to the repository. |
#62CC47 | Added in not active changelist | The file in an inactive changelist is scheduled for addition to the repository. This file status is available if the Highlight files from non-active changelists option is enabled in Settings | Version Control | Changelists. |
#FF6666 | Changelist conflict | The file in an inactive changelist has been modified in the active changelist. In this case, a new dialog will open, prompting you to resolve the changelist conflict. This file status is available if all options are enabled in Settings | Version Control | Changelists. |
#62CC47 | Copied | If a file is a copy of another file, its metadata is tracked, and such a file is marked as copied. |
#ED864A | Deleted | The file is scheduled for deletion from the repository. |
#ED864A | Deleted from file system | The file has been deleted locally but hasn't been scheduled for deletion, and it still exists in the repository. |
#4FF0FF | Have changed descendants | If a file is modified, the IDE will recursively highlight all directories containing that file. This status is available if the Highlight directories that contain modified files in the Project tree option is enabled in Settings | Version Control | Confirmation. |
#4FF0FF | Have immediate changed children | If a file is modified, the IDE will highlight its parent directory. This status is available if the Highlight directories that contain modified files in the Project tree option is enabled in Settings | Version Control | Confirmation. |
None (default color) | Hijacked | [Perforce, ClearCase, VSS] The file is modified without checkout. |
#A9B837 | Ignored | A file is intentionally untracked by VCS. |
#ED94FF | Merged | The file is merged by your VCS as a result of an update. |
#FF6666 | Merged with conflicts | During the last update, the file has been merged with conflicts. |
#FF6666 | Merged with property conflicts | During the last update, the IDE has detected differences between the properties of the local file and its server version. |
#FF6666 | Merged with text and property conflicts | Text and property conflicts happen when two or more developers modify the same lines of a file and the same file properties. |
#4FF0FF | Modified | The file has changed since the last synchronization. |
#4FF0FF | Modified in not active changelist | The file in an inactive changelist has been modified. This file status is available if the Highlight files from non-active changelists option is enabled in Settings | Version Control | Changelists. |
None (default color) | Obsolete | The file should no longer be in your working copy of the repository. |
#4FF0FF | Renamed | Since the last update, the file has been renamed. |
None (default color) | Switched | [SVN] The file is taken from a different branch than the whole project. |
D1675A | (Unknown) Unversioned | The file exists locally but is not in the repository and is not scheduled for addition. |
None (default color) | Up to date | The file hasn't been changed. |
提示
本章介绍 VCS 文件状态颜色。如果您需要设置颜色来区分特定范围的项目文件,请参考此页面。
版本控制系统注释
什么是 VCS 注释?
注释是一种文件表示形式,显示每行代码的详细信息。特别是,对于每一行,您可以查看该行的起源版本、提交该行的人员的用户 ID 以及提交日期。带注释的视图可帮助您找出谁在何时做了什么,并追溯更改。
注释代码行可用于 ClearCase、Mercurial、Git、Perforce 和 Subversion。
“注释”命令可从版本控制菜单的 VCS 特定节点、编辑器装订线的上下文菜单、文件上下文菜单和文件历史记录视图中使用。
启用注释后,装订线看起来类似于以下示例:
当前版本中修改的行的注释用粗体和星号标记。
启用注释
配置注释选项
右键单击注释装订线并从上下文菜单中选择选项:
忽略空格:空格将被忽略(git
blame -w
)。这意味着注释将指向先前有意义的提交。检测文件内的移动:当提交在同一文件中移动或复制行时,此类更改将被忽略(git
blame -M
)。这意味着注释将指向先前有意义的提交。检测跨文件的移动:当提交移动或复制在同一提交中修改的其他文件中的行时,此类更改将被忽略(git
blame -C
)。这意味着注释将指向先前有意义的提交。显示提交时间戳:如果您希望 PyCharm 在注释视图中显示提交时间戳而不是创作更改的时间,请选择此选项。
自定义日期格式
按打开 IDE 设置,然后选择外观和行为 | 系统设置| 日期格式。CtrlAlt0S
单击“VCS 注释”旁边的“日期时间模式”字段,并指定要用于 VCS 注释的日期格式。请参阅模式参考。
注释以前的修订
PyCharm 不仅允许您注释当前文件修订版本,还可以注释其先前的修订版本。注释装订线的上下文菜单提供以下选项:
注释修订:如果您想检查提交特定更改后文件的外观,此选项非常有用。为此,请右键单击此更改并从上下文菜单中选择注释修订。
注释以前的修订:如果您发现自己处于特定行中的最后更改毫无意义的情况(例如,如果所有更改都是代码格式),则此选项很有用。在这种情况下,您可以检查该文件的先前版本是什么样子。为此,请右键单击更改并从上下文菜单中选择“注释先前修订版” 。
您还可以从文件历史记录视图中注释特定文件。在“历史记录”选项卡中,选择要查看的文件版本,右键单击相应行并从上下文菜单中选择“注释” 。
查看修订版本之间的差异
要查看文件的带注释版本与其先前版本之间的差异,请将脱字符号放在注释处,右键单击它,然后选择“显示差异”。PyCharm 打开文件的差异查看器:
您还可以调用 VCS Operations 弹出窗口并选择Annotated Line | 显示差异。Alt0`
感谢您的反馈意见!