Git-挤压早期提交并在不同的分支上反映它
我是Git的新手,我正在尝试压缩一系列早期的提交,但是我在所有分支上都遇到了“压缩”反映的问题 我从以下树开始:Git-挤压早期提交并在不同的分支上反映它,git,Git,我是Git的新手,我正在尝试压缩一系列早期的提交,但是我在所有分支上都遇到了“压缩”反映的问题 我从以下树开始: A---->B---->C---->D---->E---->F---->G---->H (Branch 1) \ \
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上重放它们。”也按预期工作。我花了一段时间才确切了解第二个重新设置基址
的工作原理,但一旦我发现它,这绝对是一个更优雅的解决方案!