提交并推送更改到 Git 存储库
在 将新文件添加到 Git 版本库 ,或修改了已在 Git 版本控制下的文件,并且对其当前状态满意之后,您可以分享您的工作成果。 这包括在本地 提交 ,以将您的版本库快照记录到项目历史中,然后 推送到远程版本库,以便其他人可以访问。
设置您的 Git 用户名
Git 需要知道您的用户名,以将提交与身份关联。 如果您尚未设置用户名,GoLand 将在您首次尝试提交更改时提示您指定。
打开 终端 并执行以下命令之一:
要为您计算机上的每个 Git 仓库设置名称,请使用
$ git config --global user.name "John Smith"要为单个仓库设置名称,请使用
$ git config user.name "John Smith"
本地提交更改
打开位于左侧的垂直 提交 工具窗口 Alt+0:
在准备提交更改时,请选择相应的文件或整个更改列表。
如果按下 Ctrl+K ,则会选择整个活动更改列表。
您还可以选择 未进行版本管理的文件 节点下的文件 — GoLand 将在一步中暂存并提交这些文件。
如果您希望 将本地更改追加到最新提交而不是创建一个单独的提交,请选择 修补 选项。
输入提交说明。 您可以单击
从最近的提交说明中选择。
在推送提交之前,您也可以 编辑提交说明。
如果您需要执行提交检查、在提交后将文件上传至服务器,或使用高级选项提交,请单击右下角的
或按下 Ctrl+O:

可用的选项如下:
作者 :如果您正在提交由其他人所做的更改,可以指定该更改的作者。
签署提交 :选中此项表示您同意签署此提交,证明即将检入的更改由您本人完成,或您对所提交的代码负责。
启用此选项时,提交说明末尾将自动添加以下行: Signed off by: <username>
在 提交检查 区域中,选择您希望 GoLand 在将所选文件提交到本地版本库前执行的操作。
可用的选项如下:
在 高级提交检查 区域,可用以下选项:
提交完成后运行高级检查 :启用此选项可在完成提交后 运行所选高级提交检查。
启用此选项后,即使某些高级提交检查未通过,也会继续提交更改。
分析代码(A) :在提交时分析已修改的文件。 单击 选择配置文件 以选择一个 检查配置文件 ,IDE 将基于此配置文件运行检查。
例如,如果您替换了 go.mod 文件中的本地路径,GoLand 可以在您提交更改前显示通知。 这有助于避免误将这些替换内容提交的情况发生。
要启用此功能,请在 提交 对话框设置中选中 分析代码(A) 复选框。
检查 TODO :查看匹配指定筛选器的 TODO 项。 单击 配置 以选择一个 已有 TODO 筛选器 ,或打开 TODO 设置页面并定义要应用的新筛选器。
Run Tests: 将测试作为提交检查运行。 单击 选择配置 ,靠近 Run Tests 并选择要运行的配置。
准备就绪后,单击 提交 或 提交并推送 (Ctrl+Alt+K )可在提交后立即将更改推送到远程存储库。 您可以在推送到远程之前查看当前提交以及所有其他提交。
提交文件的一部分
有时在处理与某个特定任务相关的更改时,还会顺带修改其他影响同一文件的非相关代码。 将这类所有更改包含在一次提交中可能不是最佳方案,因为这样会更难以审核、 回滚、 变基合并等。
GoLand 允许您通过以下方式之一分别提交这些更改:
选择要包含在提交中的已更改代码块和行 ,其余更改保留在 提交更改 对话框中,以便稍后提交。
在编辑代码时 将不同代码块即时划分至不同变更列表 ,然后分别提交这些变更列表。
选择要提交的代码块和特定行
打开 提交 工具窗口 Alt+0。
要查看选定文件的本地版本与版本库版本之间的差异,请在 提交 工具窗口 Alt+0 中,单击工具栏上的
或按下 Ctrl+D。
选中要提交的每个修改或新添加代码块旁的复选框,其他更改保持未选中状态:

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

或者,您可以将鼠标悬停在标尺栏处,选中或取消选中要包含或排除在提交中的行旁边的复选框。
单击 提交。 未选中的更改将保留在当前变更列表中,以便稍后逐个提交。
从编辑器中提交所选更改
如果您已经提交了更改却发现遗落了某些内容,可以直接从编辑器中快速提交更新。
在编辑器中更改文件时,请单击标尺栏中的对应 变更标记。
在显示的工具栏中,输入提交消息并点击
提交此更改。

在提交消息字段中点击
修补 可将本地更改追加到上次提交中。
将更改放入不同的更改列表
在编辑器中更改文件时,请单击标尺栏中的对应 变更标记。
在显示的工具栏中,选择修改代码块对应的目标变更列表(或创建新变更列表):


分别提交每个变更列表。
自定义本地变更的查看方式
GoLand 提供多种设置,用于自定义在提交前查看本地更改的工作流程。
自定义提交工具窗口
提交 工具窗口 Alt+0 的位置和行为可根据您的工作流程偏好进行调整。
提交界面可以作为一个独立窗口打开,呈现为对话框形式,但仍为非阻塞(即非模态)窗口。
在 提交 工具窗口 Alt+0 中,点击
选项 并选择 。 要始终将窗口置于 IDE 前方,请选择 。
您可以将 提交 工具窗口设置为显示本地更改列表的窗口,并在准备提交更改时启用提交控件(使用
提交 或 Ctrl+K)。在 中,选中 切换提交控件 复选框。
提交 工具窗口可以成为 本地更改 标签页中 日志 标签页中的一部分,位于 Git 工具窗口 Alt+9 中。
在 中,取消选中 启用“提交”工具窗口 复选框。
自定义差异查看器行为
在 提交 工具窗口 Alt+0 中,列出了已更改的文件。 双击更改的文件后,将打开 Diff Viewer 或源文件。
点击
选项 ,选择 双击时显示 ,然后选择您偏好的选项:
差异 可在双击更改的文件时始终打开 Diff Viewer,以便查看更改内容。
源 可始终打开文件本身,便于编辑。
您还可以设置 Diff Viewer 在编辑器中或使用以下设置以单独窗口打开:
在 Diff Viewer 的工具栏中点击
设置 ,然后选择 在单独的窗口中显示差异。
在 中,取消选中 作为编辑器标签页打开差异 复选框。
使用 Git 暂存区提交更改
如果您更习惯于使用 staging 概念来提交更改,而不是通过 changelists 自动暂存已修改的文件,请按 Ctrl+Alt+S 打开设置并选择 版本控制 | Git ,然后选中 启用暂存区域 复选框。

使用 staging 区可以更轻松地分别提交对同一文件的多个更改(包括重叠变更),并且在不离开编辑器的情况下查看哪些更改已暂存。
暂存变更以进行提交
执行以下任一操作:
要暂存整个文件,请在 提交 工具窗口 Alt+0 中选择该文件,然后点击其右侧的
,或按 Ctrl+Alt+A。

要暂存文件中的特定代码块,请在编辑器中点击已修改块旁边的 更改标记 ,然后点击 暂存。

已暂存的更改(包括在 GoLand 外部暂存的)将在编辑器中以空心更改标记表示:

要仅暂存某一行等细粒度的更改,或单行中多个更改的其一,请在 提交 工具窗口 Alt+0 中选择包含变更的文件,并在上下文菜单中选择 比较HEAD 版本、暂存版本和本地版本。
此操作将打开三栏式 Diff Viewer ,左侧显示版本库版本、右侧显示本地版本,中间为功能完整的编辑器,您可以在此修改要暂存的内容。

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