Git-挤压早期提交并在不同的分支上反映它

Git-挤压早期提交并在不同的分支上反映它,git,Git,我是Git的新手,我正在尝试压缩一系列早期的提交,但是我在所有分支上都遇到了“压缩”反映的问题 我从以下树开始: A---->B---->C---->D---->E---->F---->G---->H (Branch 1) \ \

我是Git的新手,我正在尝试压缩一系列早期的提交,但是我在所有分支上都遇到了“压缩”反映的问题

我从以下树开始:

A---->B---->C---->D---->E---->F---->G---->H (Branch 1)
                                          \
                                           \
                                            \
                                             I---->J---->K (Branch 2)
我想“挤压”提交C、D、E和F,但我想在分支1和2上都反映这种“挤压”

我尝试了
'git-rebase-I HEAD~7'
并做了必要的更改(在分支1上),但我以以下内容结束:

A---->B---->C'---->G---->H (Branch 1)
      \
       \
        \
         C---->D---->E---->F---->G---->H---->I---->J---->K (Branch 2)
我想得到的是:

A---->B---->C'---->G---->H (Branch 1)
                          \
                           \
                            \
                             I---->J---->K (Branch 2)
我做错了什么?有没有办法达到我想要的结果


提前感谢。

好的,这比我评论中的
cherry-pick
答案要好,因为如果你对
cherry-pick
有很多承诺,那可能会非常乏味(它还避免了创建第三个分支)

最快的方法是两次
rebase
s。第一个是您指定的。然后,您签出分支2,并将其重设为已存在的分支1的基础,删除您不想要的提交(
C
d
E
F
G
、和
H
)。所以基本上,你会:

git checkout <branch 1>
git rebase -i HEAD~7
git签出
git rebase-i头~7
您已经这样做了,然后是:

git checkout <branch 2>
git rebase -i <branch 1>
git签出
git-rebase-i

当默认编辑器打开时,只需删除与提交
C
H
关联的行。结果将是您所寻找的。

一个简单的解决方案是在完成上述
重设基础后,在分支1的H处创建第三个分支。然后把樱桃摘到这根树枝上。然后删除分支2,并将新分支重命名为与旧分支2相同的名称。我不太熟悉
cherry pick
,但在快速检查文档后,这完全符合预期。谢谢你的快速回答!没问题。但是我有一个更好的答案要记住,在重新基调的分支1上不是
G
H
,而是一个新的
G'
H'
,具有不同的提交ID。@cmbuckley你是对的,这是一个重要的注意事项,你也可以使用
git-rebase--on-branch1h
作为最后的命令,这意味着“在
H
之后获取当前分支上的所有提交,并在branch1上重放它们。”也按预期工作。我花了一段时间才确切了解第二个
重新设置基址
的工作原理,但一旦我发现它,这绝对是一个更优雅的解决方案!