在 GIT 中拆分提交

Kob*_*ham 3 git tortoisegit

我对 Git 真的很陌生(我们正在使用 TortiseGit),但这是我的问题。我有 3 个环境:开发、质量保证和生产。客户要求进行两项更改,因此我在 Dev 中进行了两项更改,提交并推送到 QA 环境。现在,该公司希望一个更改立即进入生产,而下一个更改等待另一个系统的更改。如何仅将部分提交推送到 Prod?

Sha*_*rly 10

我使用 TortoiseGit 2.8 来分割 master 分支上的提交。步骤有很多,但流程确实不错:

  1. 右键单击并显示日志“TortoiseGit”=>“显示日志”。
  2. 右键单击要拆分的提交之前的提交。
  3. 选择“将“master”重新设置到此...(G)”
  4. 单击复选框以启用“强制变基”。您右键单击的提交之前的所有提交现在都应该显示在您单击的复选框上方。
  5. 右键单击要拆分的提交并选择“编辑”。这会将其变基类型更改为“编辑”,而不是“选择”。
  6. 单击“开始变基”。进度条启动后,将向您显示一个对话框以编辑提交消息。
  7. 单击以启用进度栏下方的“编辑/拆分提交”复选框。
  8. 按“修改”按钮。
  9. 取消选中您不想包含在第一次提交中的文件。
  10. 提交第一个提交。然后,您将看到另一个提交,其中包含第一次提交中未包含的文件。
  11. 提交所有文件后,您将看到一个对话框,要求再次提交。我不确定为什么会弹出这个对话框,但我总是回复而不再提交。


Kei*_*ken 5

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

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

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

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