在GIT中拆分提交

5

我对Git非常陌生(我们正在使用TortiseGit),以下是我的问题。我有三个环境:开发,QA和生产。客户提出了两个更改请求,因此我在Dev中进行了这两个更改,提交并将其推送到了QA环境。现在公司想要立即将其中一个更改部署到生产环境中,而另一个更改需要等待其他系统的变更。如何将提交的一部分推送到生产环境?


你不能这样做(至少从技术上讲不行,但你可以“绕过”它)。而且在直接推送提交到生产环境时要小心,这只应该用于真正无法等待的热修复。 - pbond
@OP,你正在使用分支吗? - PeeHaa
穷人的解决方案:推送一个撤销你不想发布的更改的提交,进行发布,然后再推送一个将更改恢复的提交。已经离开本地环境的提交使得操作变得非常棘手,这可能不值得头疼。 - Gimby
1
@pbond,你的意思是说不能直接将提交推送到生产环境?那么怎样才能将最终代码部署到生产环境呢? - Kobin Bingham
@PeeHaa,你不能只拆分一个提交。 - pbond
显示剩余3条评论
2个回答

9
我用 TortoiseGit 2.8 分割了主分支上的某个提交。虽然有相当多的步骤,但它们非常流畅:
  1. 右键单击并显示日志 "TortoiseGit" => "显示日志"。
  2. 右键单击要拆分的提交之前的一次提交。
  3. 选择 "将 'master' 重新安排到此处... (G)"。
  4. 选中复选框以启用 "强制重新安排"。您右键单击之前的所有提交现在应该出现在您单击的复选框上方。
  5. 右键单击要拆分的提交,选择 "编辑"。这会将其重新安排类型更改为 "编辑",而不是 "挑选"。
  6. 单击 "开始重新安排"。进度条启动后,这将呈现一个对话框以编辑提交消息。
  7. 单击以启用进度条下面的 "编辑/拆分提交" 复选框。
  8. 按 "修改" 按钮。
  9. 取消选中您不想包含在第一个提交中的文件。
  10. 提交第一个提交。然后,您将看到另一个提交,其中包含未包含在第一个提交中的文件。
  11. 提交所有文件后,您将被要求进行另一个提交。我不确定为什么会弹出此对话框,但我总是回答没有更多提交。

你的帖子真的非常珍贵!谢谢。 - Luke Givens

6
提交本身是原子性的,因此它们不能被拆分或分解。但是,由于提交只是一组更改,我们可以拆分这些更改,然后创建仅包含每个更改所需更改的单独提交。
其中一种方法是只对要拆分的提交之前的提交进行软重置,然后分别暂存每个更改集并进行提交。
如果在拆分提交之前已经推送了提交,则需要进行强制推送,因为您正在用拆分后的提交替换旧提交,请确保在进行任何更改之前先拉取。
与PeeHaa一致,您需要为每个环境创建不同的分支,然后可以挑选所需的提交。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接