在 GIT 中拆分提交

Splitting a commit in GIT

我真的是 Git 的新手(我们正在使用 TortiseGit),但这是我的问题。我有 3 个环境:Dev、QA 和 Production。客户要求进行两项更改,所以我在 Dev 中进行了两项更改,提交它们并将其推送到 QA 环境。现在,公司希望将一个更改立即投入生产,而下一个更改等待另一个系统的更改。如何将部分提交推送到 Prod?

提交本身是原子的,因此不能拆分或分解。然而,由于提交只是更改的集合,我们可以拆分这些更改,然后创建单独的提交,其中仅包含您希望对每个更改进行的更改。

这样做的一种方法是在您想要拆分的提交之前对提交进行软重置,然后暂存每组更改并单独提交。

如果您在分解之前已经推送了您的提交。您需要强制推送,因为您要用分解的提交替换旧的提交,因此请确保在进行任何更改之前拉取。

同意 PeeHaa 的观点,您可能希望为每个环境创建不同的分支,然后您可以挑选所需的提交。

我使用 TortoiseGit 2.8 拆分了主分支上的提交。有相当多的步骤,但它们确实很流畅:

  1. 右键单击并显示日志 "TortoiseGit" => "Show Log".
  2. 在要拆分的提交之前右键单击提交。
  3. Select "Rebase "master" 到此...(G)"
  4. 单击复选框以启用 "Force Rebase"。您右键单击之前的所有提交现在应该显示在您单击的复选框上方。
  5. 右键单击要拆分的提交并select "Edit"。这会将其变基类型更改为 "Edit",而不是 "Pick".
  6. 点击"Start Rebase"。进度条启动后,将显示一个对话框以编辑提交消息。
  7. 单击以启用进度条下方的 "Edit/Split commit" 复选框。
  8. 按 "Amend" 按钮。
  9. 取消选中您不想包含在第一次提交中的文件。
  10. 提交第一个提交。然后,您将看到另一个提交,其中包含第一次提交中未包含的文件。
  11. 提交所有文件后,您将看到一个对话框,要求再次提交。我不确定为什么会弹出此对话框,但我总是不会再提交。