Git 在I';我已经提交了我的更改

Git 在I';我已经提交了我的更改,git,github,Git,Github,我向u-boot提交了一些更改(我在三次提交中组织了更改),现在我想将第一次提交拆分为两次单独的提交(这是一位审阅者提出的)。我想到的是: 从远程克隆我的分支 git重置--硬头~3 重做我的更改,但这次将它们组织为四次提交,而不是三次提交 git-push-f 我的疑问是,在第2步之后,我是否应该有一个额外的git push-f?意思是顺序如下: 1.从远程克隆我的分支 2.git重置--硬头~3 3.git push-f(这是必需的,或者我可以跳过它,继续重做更改,然后再推?)。 4.重做我

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

  • 从远程克隆我的分支
  • git重置--硬头~3
  • 重做我的更改,但这次将它们组织为四次提交,而不是三次提交
  • git-push-f
  • 我的疑问是,在第2步之后,我是否应该有一个额外的git push-f?意思是顺序如下: 1.从远程克隆我的分支 2.git重置--硬头~3 3.git push-f(这是必需的,或者我可以跳过它,继续重做更改,然后再推?)。 4.重做我的更改,但这次将它们组织为四次提交,而不是三次。 5.git推送


    提前谢谢

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

    根据您的场景,您可以执行以下操作

  • 如果要拆分的提交是最新的提交(上次提交),那么这相当简单
  • git重置——软头^
    
    这将重置上次提交,但您将在工作目录中保留所有更改。然后,您只需选择要在一次提交中进行哪些更改,以及在第二次提交中进行哪些更改(从而将上一次提交拆分为两次)。然后你必须用力推

  • 如果要拆分的提交是而不是最新提交,那么事情会变得更加棘手
  • 首先,签出要拆分的提交

    git checkout <sha1>
    
    将更改添加并提交到两个提交中。现在,在这一点上,您已经成功地分割了所需的提交,但是哦,不!除此之外的其他提交如何?你需要一个接一个地挑选那些提交

    这些提交不会丢失。您仍然可以在
    git日志
    中找到它们,甚至可以在
    git reflog
    中找到它们。对于这些提交中的每一个,键入
    git cherry pick
    和bam!您已成功地将提交一分为二

    现在这里仍然有一个问题。您所在的分支仍然指向旧分支。您只需移动该分支以指向当前的提示。因此,您可以执行
    git branch-f branch name new tip commit


    最后,强制推送您的分支,以便远程服务器有您的新提交,split

    你想拆分的提交是最新的还是历史上更久远的?它实际上是第一个,但我看到你已经回答了这两个问题。非常感谢。
    git reset --soft HEAD^