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

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

可用选项如下:
作者 :如果您提交的是其他人所做的更改,您可以指定这些更改的作者。
签署提交 :如果您希望为提交签署签名,以证明您即将检入的更改是由您完成的,或您对所提交的代码承担责任,请选择此项。
启用此选项后,提交消息末尾会自动添加以下行: Signed off by: <username>
在 提交检查 区域,选择您希望 PyCharm 在将所选文件提交到本地存储库之前执行的操作。
可用选项如下:
在 高级提交检查 区域,可用选项如下:
在完成提交后运行高级检查 :启用此选项可在 完成之后运行所选的高级提交检查。
启用此选项后,即使某些高级提交检查失败,更改也会照常提交。
分析代码(A) :在提交时分析已修改的文件。 点击 选择配置文件 以选择 IDE 将用于运行检查的 检查配置文件。
检查 TODO :查看与指定过滤器匹配的 TODO 项。 点击 配置 以选择一个 现有 TODO 筛选器 ,或打开 TODO 设置页面并定义要应用的新筛选器。
Run Tests: 将测试作为提交检查运行。 在 Run Tests 附近点击 选择配置 ,然后选择要运行的配置。
在 提交后 区域,您可以选择用于将已提交的文件上传到本地或远程主机、已挂载磁盘或目录的 服务器访问配置或 服务器组。 有关详细信息,请参阅 部署。
可用选项如下:
准备就绪后,点击 提交 或 提交并推送 (Ctrl+Alt+K ),以在提交后立即将更改推送到远程存储库。 在将它们推送到远程之前,您可以审查当前提交以及所有其他提交。
提交文件的一部分
有时,当您进行与特定任务相关的更改时,您还会应用影响同一文件的其他不相关的代码修改。 将所有此类更改合并到一个提交中可能不是理想的选择,因为这样会更难对其进行审查、 还原、 拣选等。
PyCharm 允许您通过以下方式之一分别提交此类更改:
在 提交更改 对话框中直接 选择要包含到提交中的已修改代码块和行 ,并将其他更改留待稍后提交。
在编辑代码时即时 将不同的代码块放入不同的更改列表 ,然后分别提交这些更改列表。
选择要提交的代码块和特定行
打开 提交 工具窗口 Alt+0。
要显示所选文件的存储库版本与本地版本之间的差异,请在 提交 工具窗口 Alt+0 中,从上下文菜单中选择 显示差异 ,或按 Ctrl+D。
选中您要提交的每个已修改或新添加的代码块旁边的复选框,并将其他更改保持未选中:

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

或者,将鼠标悬停在装订边上,选中或清除要在提交中包含或排除的该行旁边的复选框。
点击 提交。 未选中的更改将保留在当前更改列表中,您可以单独提交它们。
从编辑器提交所选更改
如果您已提交了更改,随后意识到遗漏了某些内容,您可以直接在编辑器中快速提交任何更新。
在编辑器中更改文件时,点击装订边中的相应 更改标记。
在出现的工具栏中,编写提交消息并点击
提交此更改。

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

分别提交每个更改列表。
自定义查看本地更改的方式
PyCharm 提供多种设置,帮助您自定义在提交前审查本地更改的工作流。
自定义提交工具窗口
您可以根据首选工作流更改 提交 工具窗口 Alt+0 的位置和行为。
提交界面可以作为单独窗口打开,其外观类似对话框,但仍为非阻塞(或非模态)。
在 提交 工具窗口 Alt+0 中,点击
选项 并选择 。 要始终将窗口置于 IDE 之前,请选择 。
您可以将 提交 工具窗口设置为仅显示本地更改列表的窗口,并在准备提交更改时再开启提交控件(通过
提交 或 Ctrl+K)。在 中,选中 切换提交控件 复选框。
提交 工具窗口可以成为 Git 工具窗口的 日志 选项卡中的 本地更改 选项卡 Alt+9。
在 中,清除 启用“提交”工具窗口 复选框。
自定义差异查看器行为
在 提交 工具窗口 Alt+0 中,会显示已更改文件的列表。 双击已更改的文件可以打开差异查看器或源文件。
点击
选项 ,选择 双击时显示 ,然后选择首选选项:
差异 :在双击已更改的文件时始终打开差异查看器,以便审查更改。
源代码 :始终打开文件本身,以便进行编辑。
您还可以通过以下设置之一,将差异查看器设置为在编辑器中或在单独窗口中打开:
在差异查看器中,点击工具栏上的
设置 ,并选择 在单独的窗口中显示差异。
在 中,清除 作为编辑器标签页打开差异 复选框。
使用 Git 暂存区提交更改
如果您更习惯于在提交前 暂存更改,而不是使用会自动暂存已修改文件的 更改列表 ,请按 Ctrl+Alt+S 打开设置并选择 版本控制 | Git ,然后选中 启用暂存区域 复选框。
提交 工具窗口将如下所示:

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

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

已暂存的更改(包括在 PyCharm 之外暂存的更改)会在编辑器中以空心更改标记标注:

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

准备就绪后,按照 在本地提交更改 中的说明提交更改。
将更改推送到远程存储库
在推送更改之前,先 与远程同步 ,并确保您存储库的本地副本是最新的,以避免冲突。
PyCharm 允许您将任意分支的更改推送到其 跟踪分支或其他任何远程分支。
请执行以下任一操作:
要从 当前分支推送更改,请按下 Ctrl+Shift+K ,或在主菜单中选择 。
要从任何已设置远程的本地分支推送更改,请在 分支 弹出窗口中选择该分支,并从操作列表中选择 推送。
如果您有一些已进行但尚不想推送到远程分支的提交,请在 Git 工具窗口的 日志 选项卡(Alt+9 )中,选择您要推送的最后一个提交,并从操作列表中选择 推送此前所有提交… 选项。
推送提交对话框 将打开,显示所有 Git 存储库(对于多存储库项目),并列出自上次推送以来在每个存储库的当前分支所做的所有提交。

如果您选择了 推送此前所有提交… 选项,将显示截至所选提交哈希的所有提交列表。
如果您的项目使用多个存储库但未启用同步控制,则默认情况下仅选择当前存储库(有关启用同步存储库控制的详细信息,请参阅 版本控制设置:Git)。
如果存储库中没有远程,则会出现 定义远程 链接。 点击此链接,并在打开的对话框中指定远程名称和 URL。 该远程将被保存,您可以稍后通过 进行编辑(有关详细信息,请参阅 添加远程存储库)。
如果您想修改要推送到的目标分支,可以点击分支名称。 该标签会变为文本字段,您可以在其中输入现有的分支名称,或创建新分支。 您也可以点击右下角的 编辑所有目标 链接,同时编辑所有分支名称。
请注意,您无法更改本地分支:将推送每个所选存储库的当前分支。
如果您希望在推送之前预览更改,请选择所需的提交。 右侧窗格显示所选提交包含的更改。 您可以使用工具栏按钮查看提交的详细信息。
如果某次提交的作者与当前用户不同,该提交会用星号标记。
选中 推送标签 复选框,以将标签与提交一起推送。
默认情况下,当您执行
push操作时,除非选中此复选框,否则不会将标签发送到远程存储库。选择 全部 ,以推送所有标签,包括不属于您即将推送的所选分支的标签(相当于
git push --tags)。选择 当前分支 ,以仅推送属于您即将推送的所选分支的标签(相当于
git push --follow-tags,自 Git 1.8.3 起可用)。
准备就绪后,点击 推送 按钮,并从下拉菜单中选择您要执行的操作: 推送 或 强制推送 (相当于
git push --force-with-lease)。仅当当前分支未列在 受保护的分支 字段中时,这些选择项才可用(请参阅 版本控制设置:Git ),否则,您只能执行
push操作。
如果推送被拒绝,请更新您的工作副本
如果由于您的工作副本已过时而 推送 被拒绝,且在 设置 对话框的 Git 设置 页面中未选中 如果当前分支的推送被拒,则自动更新 选项,PyCharm 会显示 推送被拒 对话框。 请执行以下操作:
如果您的项目使用多个 Git 存储库,请指定您要更新哪些存储库。 如果您要更新所有存储库,无论这些存储库的 推送 是否被拒绝,请选择 更新所有存储库 选项。 如果清除此选项,将仅更新受影响的存储库。
如果您希望 PyCharm 在下次推送被拒绝时,使用您在此对话框中选择的更新方法以静默方式应用更新过程,请选择 记住更新方式的选择,并在将来静默更新 选项。
离开此对话框后, 设置 对话框的 Git 设置 页面中的 如果当前分支的推送被拒,则自动更新 复选框将被选中,并且所应用的更新方法将成为默认方法。
要更改更新方法,请清除此选项,以便在下次当前分支的推送被拒绝时调用 推送被拒 对话框,应用不同的更新方法,并再次选择 记住更新方式的选择 选项。
通过分别点击 变基 或 合并 按钮来选择更新方法。
何时需要使用强制推送?
当您运行 推送 时,如果远程存储库存在您本地缺失的更改,而您打算用存储库的本地副本将其覆盖, Git 将拒绝完成该操作。 通常,在用您的更改更新远程之前,您需要执行 pull 以与远程同步。
git push --force 命令会禁用此检查,并允许您覆盖远程存储库,从而擦除其历史并导致数据丢失。 在底层,当您选择强制推送时,PyCharm 会执行 git push --force-with-lease 操作,这是一种更安全的选项,可帮助确保您不会覆盖他人的提交(有关推送选项的更多详细信息,请参阅 git push)。
您可能仍需执行 git push --force 的一种情况是:当您对已推送的分支进行变基,然后希望将其推送到远程服务器时。 在这种情况下,当您尝试推送时, Git 会拒绝您的更改,因为远程引用不是本地引用的祖先。 如果在这种情况下执行 拉取 ,您最终会得到该分支的两个副本,随后您需要将它们合并。