阅读(1113) (10)

IDEA:将更改提交并推送到远程Git仓库

2017-12-11 11:15:58 更新

在将新文件添加到Git仓库或或修改已有的Git版本控制下的文件,并且您对其当前状态感到满意之后,您可以共享您的工作结果。这包括在本地提交它们,以便将项目库的快照记录到项目历史记录中,然后将它们推送到远程存储库,以便其他人可以使用它们。

在本地提交更改

如果您意识到需要编辑提交消息,则可以在推送此提交之前执行此操作。请参阅编辑提交消息。

  1. 以下列方式之一调用“提交”对话框:按Ctrl+K。在“版本控制”工具窗口的“本地更改”选项卡中,选择要提交的列表或文件,然后单击工具栏上的“提交更改”按钮 ,或者在选择的上下文菜单上选择“提交更改 ”。在主菜单上,选择:VCS | 提交,或VCS | Git | 提交文件。在“提交更改”对话框中列出了自上次已修改的所有文件提交,和所有新添加的版本文件。
  2. 输入一个提交消息,然后选择IntelliJ IDEA在将所选文件提交到本地存储库之前执行的提交前操作。
  3. 如有必要 ,请在Git部分中选择以下选项:Author:如果您正在提交他人所做的更改,您可以指定这些更改的作者。Amend commit:如果要将本地更改添加到最新的提交中,请选择此选项(有关详细信息,请参阅将阶段更改与先前的提交(修改提交)相结合)。Sign-off commit:如果您想要注销提交,请选择此选项,即证明您将要签入的更改是由您进行的,或者您对相关代码负责。启用此选项后,会在提交消息的末尾自动添加以下行:
    Signed off by: <username>    
  4. 单击“提交”按钮或将鼠标悬停在此按钮上以显示以下可用提交选项之一:提交和推送:提交后立即将更改推送到远程仓库。创建补丁: 根据您即将提交的更改生成补丁。在打开的“ 创建补丁”对话框中,输入补丁文件的名称,并指定是否需要反向补丁。远程运行:运行您的个人构建。此选项仅在您登录到TeamCity时可用。 有关详细信息,请参阅TeamCity插件文档。

您可以自定义应用于提交消息的规则,如主题与正文之间的空行和最大消息长度。为此,请在 "设置" 对话框 (Ctrl + Alt + S) 中选择:版本控制| 提交对话框。

还有一个快速修复和重新格式化操作,允许您包装长行或对提交消息进行格式设置。

即使只有Unversioned文件出现在项目中, 您可以调用Commit Changes对话框,例如从IntelliJ IDEA外部添加。

将更改推送到远程Git仓库

在推送您的更改之前,请与远程同步,并确保您的本地存储库副本是最新的以避免冲突。

IntelliJ IDEA允许您将更改从当前分支上传到其跟踪的分支或任何其他远程分支。

如果提交的作者与当前用户不同,则此提交用星号标记。

  1. 按Ctrl+Shift+K或从主菜单选择:VCS | Git | Push。“ 推送提交”对话框将打开,显示所有Git仓库(对于多存储库项目),并列出自上次推送以来每个存储库中当前分支中所做的所有提交。如果您有一个项目使用多个不同步控制的存储库,则默认情况下仅选择当前存储库(有关如何启用同步存储库控件的详细信息,请参阅“版本控制设置:Git”)。
  2. 如果存储库中没有遥控器,则会显示 "定义远程链接"。点击此链接并在打开的对话框中指定远程名称和URL。它将被保存,您可以稍后通过:VCS | Git | Remotes 编辑它(有关详细信息,请参阅添加远程仓库)。
  3. 如果要修改要推送的目标分支,可以单击分支名称。标签将变成一个文本字段,您可以键入现有的分支名称,或创建一个新的分支。您也可以单击右下角的"编辑所有目标"链接来同时编辑所有分支名称。请注意,您不能更改本地分支:将会推送每个选定存储库的当前分支。
  4. 如果您想在推送更改之前预览更改,请选择所需的提交。右侧窗格显示所选提交中包含的更改。您可以使用工具栏按钮来检查提交详细信息。
  5. 点击推送准备时按钮,然后从下拉菜单中选择要执行的操作: Push或Force push。只有启用了 "允许强制推送" 选项处于启用状态时才可用(请参阅版本控制设置:Git),否则您只能执行该push操作。

您也可以通过按选定元素的 enter 或 F2 切换到编辑模式。

您可以按下Ctrl+Q为所选的提交来显示额外的信息,例如提交作者、时间、哈希和提交信息。

如果选择整个存储库,则所有提交的所有文件都将列在右侧窗格中。

如果同一文件在多次提交中被修改,则只会在选择这些提交或整个存储库时列出一次,如果您为该文件调用文件差异查看器,则所有更改都将被压缩到一起。

如果由于工作副本过期而拒绝推送,则IntelliJ IDEA将显示“ 推送被拒绝”对话框,前提是“设置” 对话框的“Git设置”页面中的“如果推送当前分支时自动更新被拒绝”选项未选中。请执行下列操作:

  1. 如果您的项目使用多个Git仓库,请指定您想要更新的其中之一。如果要更新所有存储库,无论是否push拒绝,请选择 "更新不拒绝的资料库" 以及 "选项"。如果清除此选项,则只会更新受影响的存储库。
  2. 如果您希望IntelliJ IDEA以静默方式应用更新过程,则在下一次使用在此对话框中选择的 update 方法拒绝推送时,选择 "记住更新方法" 选项,并在将来的选择中进行静默更新。在离开这个对话框之后,将选择 "设置" 对话框的 "Git 设置" 页中的 "在当前分支被拒绝时自动更新" 复选框,并且而应用的 update 方法将成为默认值。要更改更新策略,请取消选择此选项以在下次拒绝当前分支的推送时调用“推送被拒绝”对话框,应用不同的更新过程并再次选择“记住更新方法选择”选项。
  3. 分别点击Rebase或Merge按钮选择更新方法(重新绑定或合并)。

什么时候需要使用 force push?

当您运行 push 时,如果远程仓库中有您所缺少的更改,并且要使用本地存储库副本进行覆盖,Git将拒绝完成操作。通常情况下,您需要执行pull操作才能与远程进行同步,然后使用更改进行更新。

该 --force push 命令将禁用此检查,并允许您覆盖远程仓库,从而删除其历史记录并导致数据丢失。

注意:除非绝对必要(例如,如果您不小心推送了一些敏感数据),否则应该避免重新启动分支并修改其历史记录。

当您需要执行--force push的一种可能的情况是,当您推送一个推送的分支,然后将其推送到远程服务器。在这种情况下,当您尝试推送时,Git将拒绝您的更改,因为远程参考不是本地参考的上级。如果您在这种情况下执行pull操作,您将最终得到两份你需要合并的分支。

如果您决定强制推出重新设计的分支,并且您正在团队中工作,请确保:

  • 没有人拉你的分支,并做了一些本地更改
  • 所有待处理的更改均已提交并推送
  • 您有该分支的最新更改