Git 如何在分支的根提交之前添加新提交?

Git 如何在分支的根提交之前添加新提交?,git,Git,我有一个分支,有两个分支。我需要在它们之前添加第三个提交。通常我只需添加一个新的tip提交,执行git-rebase-I,然后将其移动到顶部(使其成为分支上的第一个提交)。但是,我不能这样做,因为所讨论的特定更改会影响由前2次提交更改的代码,我需要在这些更改之前进行此更改(以避免不必要的冲突) 目前,我唯一能够做到这一点的方法是大致做到: $git-rebase-i源代码/主代码 将顶部提交标记为编辑(最早的提交) $git重置--软^ $git stash保存“上次提交” 进行一些代码更改 $

我有一个分支,有两个分支。我需要在它们之前添加第三个提交。通常我只需添加一个新的tip提交,执行
git-rebase-I
,然后将其移动到顶部(使其成为分支上的第一个提交)。但是,我不能这样做,因为所讨论的特定更改会影响由前2次提交更改的代码,我需要在这些更改之前进行此更改(以避免不必要的冲突)

目前,我唯一能够做到这一点的方法是大致做到:

  • $git-rebase-i源代码/主代码
  • 将顶部提交标记为编辑(最早的提交)
  • $git重置--软^
  • $git stash保存“上次提交”
  • 进行一些代码更改
  • $git commit-am“New commit”
  • $git stash pop
  • $git commit-aC@{2}
    (使用相同的消息再次提交上一次提交)
  • $git rebase--继续
    (直到完成)
  • 这需要很多步骤,而且很混乱。如果能够在我的分支第一次提交之前将提交标记为编辑,然后在上面进行提交,那就太好了。但如果我的
    merge base
    是一个合并提交,那么这将不起作用。我试过这个:

    $ git rebase -i origin/master^
    
    我还尝试:

    $ git rebase -i origin/master^2
    
    合并上的两个父级都作为我的基础提交。然而,我在todo文件中得到了大量额外的提交,我不知道为什么


    实现这一点的简单直观的方法是什么?

    可以通过
    cherry pick

    第一步。记录3个提交的sha(假设它们是A1、B1和C1)

    第二步。从相关分支执行以下操作(在下面的示例中,我假设它是从origin/master分支的)


    我在git邮件列表上问了同样的问题,发现了一个非常可爱的解决方法。在交互式重基的TODO文件中,只需在顶部添加一个
    exec false

    exec false
    pick 123abc Commit 1
    pick 456xyz Commit 2
    

    exec
    将执行给定的shell命令
    false
    导致非零返回代码,rebase将其解释为失败,并在下一次提交之前停止rebase,从而允许您直接进行提交。然后您可以
    git-rebase--正常继续

    如果您签出一个新分支,提交该分支,然后切换回原始分支,然后
    git-rebase--切换到
    ,则可以将步骤保存约1/2。
    
    exec false
    pick 123abc Commit 1
    pick 456xyz Commit 2