首页 > 解决方案 > 在我已经提交更改后,如何将提交分成两部分

问题描述

我向 u-boot 提交了一些更改(我在三个提交中组织了我的更改),现在我想将我的第一个提交拆分为两个单独的提交(这是由审阅者提出的)。这是我想到的:

  1. 从远程克隆我的分支
  2. git reset --hard HEAD~3
  3. 重做我的更改,但这次将它们组织成四个提交而不是 3 个。
  4. git 推送 -f

我的疑问是我应该在第 2 步之后再添加一个 git push -f 吗?意思是顺序如下: 1. 从远程克隆我的分支 2. git reset --hard HEAD~3 3. git push -f (这是必要的,或者我可以跳过这个并继续重做我的更改然后推送?)。4. 重做我的更改,但这次将它们组织成四个提交而不是 3. 5. git push

提前致谢。

标签: gitgithub

解决方案


你提出的策略可行,但你必须重做你的工作,这是在你所有其他工作之上的更多工作。所以这不好。

鉴于您拥有的场景,您可以执行以下操作。

  1. 如果您要拆分的提交是最新的提交(您所做的最后一个),那么这很简单。
git reset --soft HEAD^

这将重置您的上次提交,但您会将所有更改保留在工作目录中。然后,您只需选择要在一次提交中进行哪些更改以及在第二次提交中进行哪些更改(从而将您的最后一次提交分成两个)。然后你必须强制 push

  1. 如果您要拆分的提交不是最新的提交,那么事情就会变得更加棘手。

首先,签出您要拆分的提交。

git checkout <sha1>

然后重置您的更改(如第一种情况)

git reset --soft HEAD^

将您的更改添加并提交到两个提交中。现在,此时,您已成功拆分所需的提交,但是哦,不!在这个之上的其他提交呢?您需要cherry-pick一一提交。

这些提交不会丢失。您仍然可以在您的git log,甚至在您的git reflog. 对于这些提交中的每一个,键入git cherry-pick <sha1>并 bam!您已成功将提交一分为二。

现在这里还是有问题。你所在的分支仍然指向旧的提交。您只需移动该分支以指向您所在的当前提示。所以你可以做到git branch -f branch-name new-tip-commit

最后,强制推送您的分支,以便远程有您的新提交,拆分!


推荐阅读