编辑 Git 项目历史
Git 允许你编辑你的项目历史。当您正在处理功能分支并希望在与他人共享之前对其进行清理并使其看起来像您想要的方式时,这很有用。例如,您可以编辑提交消息,将与相同功能相关的较小提交压缩在一起,或者将包含不相关更改的提交拆分为单独的提交,将更改添加到先前的提交等等。
编辑提交消息
如果您唯一需要更改的是提交消息,则可以在推送此提交之前对其进行编辑。
在Git工具窗口 的Log选项卡中 右键单击要编辑其消息的提交, 然后从上下文菜单中选择Edit Commit Message ,或按。Alt+9F2
在打开的对话框中,输入新的提交消息并单击OK。
修改之前的提交
有时您可能提交得太早而忘记添加一些文件,或者在最后一次提交中注意到您想要修复而不创建单独提交的错误。
您可以通过使用将分阶段更改附加到先前提交的修改提交选项来执行此操作。结果,您最终得到一个提交而不是两个不同的提交。
在“提交工具”窗口Alt+0中,选择包含要添加到上一次提交的更改的已修改文件。
选择Amend复选框,使Commit按钮变为Amend Commit并单击它。
修改任何较早的提交
如果您需要将更改添加到任何较早的提交而不是单独提交,您可以使用fixup
或操作来执行此squash
操作。两个命令都将阶段性更改附加到选定的提交,但处理提交消息的方式不同:
squash
将新的提交消息添加到原始提交fixup
丢弃新的提交消息,只留下来自原始提交的消息
在“提交工具”窗口Alt+0中,选择包含要附加到较早提交的更改的已修改文件。
在 Git工具窗口 的Log选项卡中 ,右键单击要使用本地更改修改的提交,然后从上下文菜单中选择Fixup或Squash Into 。Alt+9
如果您选择压缩更改,如有必要,请修改提交消息。
单击Commit按钮上的箭头并选择Commit and Rebase。
壁球提交
如果您需要合并与相同功能相关的任何两个提交,您可以将它们压缩为一个,以便更清晰的分支历史记录。
在 Git工具窗口 的Log选项卡中, 选择要合并为一个的提交,然后从上下文菜单中选择Squash Commits 。Alt+9
在打开的对话框中,编辑提交消息(默认情况下,它包含来自两个提交的消息)并单击OK。
Ctrl+Shift+K将更改推送到远程分支。
删除提交
您可以放弃当前分支中的推送提交,而无需创建恢复更改的额外提交。
在Log视图中选择要丢弃的提交,然后从上下文菜单中选择Drop Commit 。
通过执行交互式变基来编辑项目历史
借助 PhpStorm 中的 Git 集成,您可以通过执行交互式 rebase来编辑项目历史记录,以使其线性和有意义。这允许您在将更改从功能分支集成到另一个分支之前,通过更改单个提交、更改其顺序、将提交压缩为一个、跳过包含无关更改的提交等来清理提交历史记录。
编辑当前分支的历史
PhpStorm 允许您在将更改应用到其他分支之前编辑当前分支中的提交历史记录。
打开 Git工具窗口 Alt+9并切换到日志选项卡。
过滤日志,使其仅显示来自当前分支的提交:
选择要编辑的一系列提交中最旧的提交,右键单击它并选择Interactively Rebase from Here。
将显示Interactive Rebase对话框,其中包含当前分支中在选定提交之后进行的所有提交的列表:
如果“从此处交互式变基”选项被禁用,这可能是由于以下原因之一:
选定的提交有几个父母
选定的提交不在当前分支中
选定的提交被推送到受保护的分支
要确定原因,请将操作悬停在上下文菜单中并在状态栏中查找消息:
您可以对分支历史记录执行以下更改:
更改应用提交的顺序:使用和按钮在列表中上下移动提交。
选择一个提交:这是所有提交的默认状态。如果您需要撤消已对提交执行的操作,请单击Pick 以便按原样应用此提交。
编辑:单击停止以编辑 ,这样当您启动变基时,您会在此提交处停止以便能够对其进行编辑。
当 rebase 在提交时停止时,PhpStorm 窗口的右下角会弹出一条通知,让您继续或中止 rebase:
您可以在继续 rebase 之前使用上下文操作(例如Revert、Undo、Amend等)修改此提交。如果您不执行任何操作,则将按原样应用此提交。
如果您已关闭通知,请从主菜单中选择Git | 继续变基以恢复它。
改写提交消息:单击改写或双击提交并在打开的迷你编辑器中编辑文本。
将两个提交合并为一个:选择要合并到前一个提交中的提交,然后单击Squash或Squash按钮旁边的箭头,然后单击Fixup。
如果您单击Squash,默认情况下来自两个提交的消息将被合并,因此如果您不修改生成的提交消息,此操作将反映在分支历史记录中。
如果单击Fixup,则 fixup 提交的提交消息将被丢弃,因此此更改将在分支历史记录中不可见。
在这两种情况下,您都可以在应用这些操作之一时打开的迷你编辑器中编辑提交消息。
Ignore a commit:单击Drop以便不应用来自所选提交的更改。
撤消所有更改:单击重置以放弃您已应用于提交的所有操作。
因此,Rebase Commits对话框会显示一个图表,说明您已应用于分支中的提交的所有操作,以便您可以在开始 rebase 之前查看它们:
单击开始变基。
编辑一个分支历史并将其集成到另一个分支中
PhpStorm允许您在应用更改之前在另一个分支之上重新设置一个分支并编辑源分支历史记录。
从主菜单中选择
:单击修改选项并选择--interactive。
从列表中,选择要将当前分支变基的目标分支:
如果您需要从特定提交开始重新设置源分支而不是重新设置整个分支,请单击修改选项并选择--onto。在源分支字段中,输入您要将当前分支应用到新基础的提交的哈希值:
如果您要变基的分支当前未检出,请单击Modify options,单击Select another branch to rebase,然后从出现的列表中选择一个分支:
PhpStorm 将在开始 rebase 操作之前检查此分支。
如果要对分支中可访问的所有提交进行变基,请单击修改选项并选择--root(有关此选项的更多信息,请参阅git-rebase)。
如果您需要保留空提交,即不会更改其父项的任何内容的提交,请单击修改选项并选择--keep-empty(有关此选项的更多信息,请参阅git-rebase)。
单击变基。
将显示Interactive Rebase对话框,其中包含当前分支中在选定提交之后进行的所有提交的列表。
您可以对分支历史记录执行以下更改:
更改应用提交的顺序:使用和按钮在列表中上下移动提交。
选择一个提交:这是所有提交的默认状态。如果您需要撤消已对提交执行的操作,请单击Pick 以便按原样应用此提交。
编辑:单击停止以编辑 ,这样当您启动变基时,您会在此提交处停止以便能够对其进行编辑。
当 rebase 在提交时停止时,PhpStorm 窗口的右下角会弹出一条通知,让您继续或中止 rebase:
您可以在继续 rebase 之前使用上下文操作(例如Revert、Undo、Amend等)修改此提交。如果您不执行任何操作,则将按原样应用此提交。
如果您已关闭通知,请从主菜单中选择Git | 继续变基以恢复它。
改写提交消息:单击改写或双击提交并在打开的迷你编辑器中编辑文本。
将两个提交合并为一个:选择要合并到前一个提交中的提交,然后单击Squash或Squash按钮旁边的箭头,然后单击Fixup。
如果您单击Squash,默认情况下来自两个提交的消息将被合并,因此如果您不修改生成的提交消息,此操作将反映在分支历史记录中。
如果单击Fixup,则 fixup 提交的提交消息将被丢弃,因此此更改将在分支历史记录中不可见。
在这两种情况下,您都可以在应用这些操作之一时打开的迷你编辑器中编辑提交消息。
Ignore a commit:单击Drop以便不应用来自所选提交的更改。
撤消所有更改:单击重置以放弃您已应用于提交的所有操作。
因此,Rebase Commits对话框会显示一个图表,说明您已应用于分支中的提交的所有操作,以便您可以在开始 rebase 之前查看它们:
单击开始变基。