提交更改并将其推送到 Git 仓库
一旦您已经 将新文件添加到 Git 仓库 ,或修改了已在 Git 版本控制下的文件,并且对它们的当前状态感到满意,您就可以分享您的工作成果。 这涉及到在本地 提交来记录您的仓库快照到项目历史,然后 推送到远程仓库,以便其他人可以使用它们。
设置您的 Git 用户名
Git 需要知道您的用户名以便将提交与身份关联。 如果您尚未设置用户名,IntelliJ IDEA 将在您第一次尝试提交更改时提示您进行指定。
打开 Terminal 并执行以下命令之一:
要为您机器上的每个 Git 仓库设置名称,请使用
$ git config --global user.name "John Smith"要为单个存储库设置名称,请使用
$ git config user.name "John Smith"
在本地提交更改
打开位于左侧的垂直 提交 工具窗口 Alt+0:

当您的更改准备好提交时,请选择相应的文件或整个更改集。
如果您按下 Ctrl+K ,整个活动的更改列表将被选中。
您还可以选择 未进行版本管理的文件 节点下的文件——IntelliJ IDEA 将在一个步骤中暂存并提交这些文件。
如果您想 将本地更改追加到最新提交而不是创建单独提交,请选择 修订 选项。
输入提交信息。 您可以点击
从最近的提交消息列表中选择。
您也可以在推送提交之前 编辑提交消息。
如果您需要执行提交检查、在提交后上传文件到服务器或使用高级选项提交,请点击右下角的
:

有以下选项:
作者 :如果您正在提交其他人作出的更改,您可以指定这些更改的作者。
Sign-off 提交 :选择是否签署您的提交,以证明您即将提交的更改是由您完成的,或者您对所提交的代码负责。
启用此选项时,以下行会自动添加到提交消息的末尾: 签署者:<用户名>
在 提交检查 区域,选择您希望 IntelliJ IDEA 在提交选定文件到本地仓库之前执行的操作。
有以下选项:
重新设置代码格式 :根据 项目代码样式设置执行代码格式化。
重新排列代码 :根据 排列规则偏好重新排列您的代码。
优化 import :删除冗余的 import 语句。
清理 :从代码清理检查中批量应用快速修复。 请点击 选择配置档案 以选择一个 配置 ,IDE 将从中运行检查。
更新版权 :根据选择的版权配置文件—范围组合 添加或更新版权声明。
检查恶意依赖项 :搜索项目中可能声明的 恶意 NPM 和 PyPI 依赖项。
在 高级提交检查 区域,提供以下选项:
提交完成后运行高级检查 :启用此选项以在提交完成 后运行所选的高级提交检查。
启用此选项后,若某些高级提交检查失败,仍然会提交更改。
分析代码(A) :在提交时分析已修改的文件。 点击 选择配置档案 以选择一个 检查配置文件 ,IDE 将从中运行检查。
检查 TODO :查看与指定筛选器匹配的 TODO 项。 点击 配置 选择一个 现有 TODO 过滤器 ,或打开 TODO 设置页面 并定义一个新过滤器进行应用。
Run Tests: 将测试作为提交检查运行。 点击 选择配置 附近的 Run Tests 并选择您想运行的配置。
在 提交后 区域,您可以选择 服务器访问配置或 服务器组 ,以便将已提交的文件上传到本地或远程主机、已挂载的磁盘或目录。 如需更多信息,请参阅 部署。
有以下选项:
当您准备好时,点击 提交 或 提交并推送 (Ctrl+Alt+K) 以在提交后立即将更改推送到远程存储库。 您将能够在推送到远程之前查看当前提交及所有其他提交。
提交部分文件
有时候,当您对特定任务进行更改时,您还会对同一文件应用其他不相关的代码修改。 将所有此类更改包含在一个提交中可能不是一个好的选择,因为这样更难以审核、 revert、 cherry-pick等。
IntelliJ IDEA 允许您通过以下其中一种方式单独提交这些更改:
在 选择修改后的代码块和行 您想要在 提交更改 对话框中立即提交,并将其他更改保留以便稍后提交。
编辑代码时,您可以 将不同的代码块放入不同的变更列表中 ,然后分别提交这些变更列表。
选择您想要提交的块和特定行
打开 提交 工具窗口 Alt+0。
要显示选定文件的存储库版本与本地版本之间的差异,请在 提交 工具窗口 Alt+0 中,点击工具栏上的
或按 Ctrl+D。
选择您要提交的每个更改或新增代码块旁的复选框,保留其它未选择的更改:

如果您只想提交某个代码块中的特定行,请右键点击您想要包含的行并选择 拆分区块并将所选行包含到提交中。

或者,将鼠标悬停在装订区域,选择或清除您希望包含在提交中或排除在提交中的行旁边的复选框。
点击 提交。 未选择的更改将保留在当前变更列表中,以便您可以单独提交。
从编辑器提交选定的更改
如果您已经提交了更改,然后发现忘记了一些内容,您可以直接从编辑器快速提交任何更新。
当您在编辑器中更改文件时,请点击边栏中的相应 更改标记。
在出现的工具栏中,输入提交消息并点击
提交此更改。

在提交消息字段中点击
修订 以将本地更改附加到最新的提交。
将更改放入不同的更改列表
当您在编辑器中更改文件时,请点击边栏中的相应 更改标记。
在出现的工具栏中,选择修改后的代码块的目标更改列表(或创建一个新的更改列表):

分别提交每个更改列表。
使用 Git 暂存区提交更改
如果您更习惯于 暂存更改以进行提交,而不是使用 更改列表 (其中修改的文件会自动暂存),请按 Ctrl+Alt+S 打开设置并选择 版本控制 | Git ,然后选中 启用暂存区域 复选框。
提交 工具窗口现在将如下所示:

使用暂存区域可以让您轻松地将对同一文件的不同更改分别提交(包括重叠的更改),并且无需切换编辑器焦点即可查看哪些更改已经暂存。
准备提交的更改
请执行以下操作之一:
要暂存整个文件,请在 提交 工具窗口 Alt+0 中,选择此文件并点击其右侧的
或按 Ctrl+Alt+A。

要将文件内的特定片段暂存,请在编辑器中点击修改片段旁边页边空白中的 更改标记 ,然后点击 阶段。

在编辑器中,已暂存的更改(包括从 IntelliJ IDEA 外暂存的更改)标记为空心的更改标记:

要暂存细粒度更改(如单行而不是代码块,甚至是单行中的多个更改之一),请在 提交 工具窗口 Alt+0 中,选择包含更改的文件并从上下文菜单中选择 比较HEAD 版本、暂存版本和本地版本。
这将打开一个三方 差异查看器 ,左窗格显示版本库版本,右窗格显示本地版本,中间窗格是一个功能齐全的编辑器,您可以在其中进行想要暂存的更改。

准备就绪后,请按照 本地提交更改中的描述提交更改。
将更改推送到远程存储库
在推送您的更改之前, 与远程同步 ,并确保您本地的仓库副本是最新的,以避免冲突。
IntelliJ IDEA 允许您将更改从任何分支上传到其 tracked branch或任何其他远程分支。
请执行以下操作之一:
要从 当前分支推送更改,请按 Ctrl+Shift+K 或从主菜单中选择 。
要将更改从任何具有远程的本地分支推送出去,请在 分支 弹出窗口中选择此分支,然后从操作列表中选择 推送。
推送提交对话框 打开后显示所有 Git 仓库(针对多仓库项目),并列出自上次推送以来在每个仓库的当前分支中所做的所有提交。
如果您有一个项目使用多个未同步控制的仓库,则默认情况下只会选择当前仓库(有关启用同步仓库控制的更多信息,请参阅 版本控制设置:Git)。
如果存储库中没有远程仓库,将出现 定义远程 链接。 点击此链接,并在打开的对话框中指定远程名称和 URL。 它将被保存,您可以稍后通过 进行编辑(有关更多信息,请参阅 添加远程存储库)。
如果您想修改要推送的目标分支,可以点击分支名称。 标签会变成一个文本字段,您可以在其中输入现有的分支名称,或创建一个新分支。 您还可以点击右下角的 编辑所有目标 链接来同时编辑所有的分支名称。
请注意,您无法更改本地分支:每个选定的版本库的当前分支将被推送。
如果您有一些已提交但尚未想要推送到远程分支的提交,请在 日志 选项卡中的 Git 工具窗口中选择您要推送的最后一次提交,并从操作列表中选择 推送此前所有提交… 选项。
该 推送提交 对话框显示了所有直到所选提交哈希值的提交记录。
如果您希望在推送更改之前预览它们,请选择所需的提交。 右侧窗格显示所选提交中的更改。 您可以使用工具栏按钮查看提交详情。
如果提交的作者与当前用户不同,此提交将以星号标记。
准备好后点击 推送 按钮并从下拉菜单中选择您要执行的操作: 推送 或 强制推送 (相当于
push --force-with-lease)。当前分支仅在不列在 受保护的分支 字段中(请参阅 版本控制设置:Git )时可以选择这些选项,否则,您只能执行
push操作。
如果推送被拒绝,请更新您的工作副本
如果由于您的工作副本已过时而拒绝了 push ,则 IntelliJ IDEA 会显示 推送被拒 对话框,前提是在 设置 对话框的 Git 设置 页面中没有选择 如果当前分支的推送被拒,则自动更新 选项。 请执行以下操作:
如果您的项目使用多个 Git 代码库,请指定您想要更新的代码库。 如果您想更新所有存储库,无论 push 是否被拒绝,请选择 更新所有仓库 选项。 如果未选中此选项,则只会更新受影响的仓库。
如果您希望 IntelliJ IDEA 在下一次使用此对话框中选择的方法更新时因推送被拒绝而静默地应用更新程序,请选择 记住更新方法选择并在未来静默更新 选项。
在您离开此对话框后, 如果当前分支的推送被拒,则自动更新 复选框将在 Git 设置 页面的 设置 对话框中被选中,并且应用的更新方法将成为默认方法。
要更改更新策略,请取消选择此选项,以在当前分支的推送被拒绝时调用 推送被拒 对话框,应用不同的更新流程,并再次选择 记住更新方法选择 选项。
我什么时候需要使用force push?
当您运行 push 时,如果远程仓库有您尚未获取的更改,并且您将用本地仓库的副本覆盖那些更改,Git 将拒绝完成操作。 通常,您需要执行 pull来与远程同步,然后再用您的更改更新它。
--force push 命令禁用此检查,并让您覆盖远程存储库,从而擦除其历史记录并导致数据丢失。 在后台,当您选择强制推送时,IntelliJ IDEA 会执行 push --force-with-lease 操作,这是一个更安全的选项,可以帮助您确保不会覆盖其他人的提交(有关推送选项的更多详细信息,请参阅 git push)。
在某些情况下,您仍然需要执行 --force push ,例如当您对已推送的分支进行 rebase 后,想要将其推送到远程服务器。 在这种情况下,当您尝试推送时,Git 将拒绝您的更改,因为远程引用不是本地引用的祖先。 如果您在这种情况下执行 pull ,您将得到两个分支的副本,之后需要合并它们。