Git Rebase包含特定提交
我希望了解实现这一目标的正确策略。当我针对Bar对分支Foo进行重新基化时,我得到以下分支输出Git Rebase包含特定提交,git,Git,我希望了解实现这一目标的正确策略。当我针对Bar对分支Foo进行重新基化时,我得到以下分支输出 Foo: A-O-X-Y-Z Bar: A-B-C-D 我想问的是,是否可以重新设置基础并只包含一组特定的提交(X,Y,Z)?我想实现这一点,这样就排除了提交 I ran: git checkout Foo git rebase Bar # fix merge errors and push Resulting Foo branch: A-B-C-D-O-X-Y-Z 很容易达到你想要的结果。 您
Foo:
A-O-X-Y-Z
Bar:
A-B-C-D
我想问的是,是否可以重新设置基础并只包含一组特定的提交(X,Y,Z)?我想实现这一点,这样就排除了提交
I ran:
git checkout Foo
git rebase Bar
# fix merge errors and push
Resulting Foo branch:
A-B-C-D-O-X-Y-Z
很容易达到你想要的结果。 您需要的命令是:
Desired Result:
A-B-C-D-X-Y-Z
这种形式的rebase
,将两个引用作为参数(现在忽略——到Bar
),是以下两个命令的快捷方式:
git rebase --onto Bar Foo~3 Foo
工作原理
如果没有--on Bar
,上面的rebase
命令将从当前分支(Foo
)获取无法从Foo~3
访问的提交,并将其保存在临时区域中。然后它将当前分支重置为Foo~3
,并按原始顺序逐个应用保存的提交
使用--on Bar
,保存和恢复提交的方式相同,但恢复开始于由Bar
标识的提交之上,而不是Foo~3
总之,上面的命令从分支Foo
(以及Foo
分支)获取最近的3次提交,并将它们放在提交标识栏的顶部
警告
如果在运行此命令后,无法从分支开始访问commitO
,则它将从历史记录中消失。它不会立即移除。如果您知道它的散列,或者通过检查git reflog
的输出,您仍然可以访问它一段时间。Git将在一段时间后(通常约两周)完全删除它,如果它不再可以使用分支、标记或reflog访问
事实上,任何东西都不会立即移除;即使是从一个分支“移动”到另一个分支的git-rebase
“提交”实际上也被复制了,原始文件仍在存储库中,可以访问但不可见
在Git网站上阅读更多信息,或在终端上运行
Git help rebase
。您可以使用rebase to
或cherry pick
。
git checkout Foo
git rebase --onto Bar Foo~3