Git 变基包括特定的提交

  • 本文关键字:提交 包括特 Git git
  • 更新时间 :
  • 英文 :

Foo:
A-O-X-Y-Z
Bar:
A-B-C-D

我希望了解实现这一目标的正确策略是什么。当我对 Bar 进行分支 Foo 的变基时,我得到以下分支输出。

I ran:
git checkout Foo
git rebase Bar
# fix merge errors and push
Resulting Foo branch:
A-B-C-D-O-X-Y-Z

我想问的是,是否可以变基并仅包含一组特定的提交(X,Y,Z(?我想实现这一点,因此排除"O"提交。

Desired Result:
A-B-C-D-X-Y-Z

很容易达到你想要的结果。 您需要的命令是:

git rebase --onto Bar Foo~3 Foo

这种将两个引用作为参数(暂时忽略--onto Bar(的rebase形式是以下两个命令的快捷方式:

git checkout Foo
git rebase --onto Bar Foo~3

工作原理

如果没有--onto Bar,上面的rebase命令从当前分支(Foo(获取无法从Foo~3访问的提交,并将它们保存在临时区域中。然后,它将当前分支重置为Foo~3,并按原始顺序逐个应用保存的提交。

使用--onto Bar,提交的保存和恢复以相同的方式发生,但恢复从Bar而不是Foo~3标识的提交开始。

总而言之,上面的命令从分支Foo(连同Foo分支(获取最近的 3 次提交,并将它们放在由Bar标识的提交之上。

警告!

如果在运行此命令后,无法从分支开始访问提交O,它将从历史记录中消失。它不会立即删除。如果您知道它的哈希值或通过检查git reflog的输出,您仍然可以访问它一段时间。如果无法使用分支、标签或 reflog 访问它,Git 将在一段时间后(通常大约两周(完全删除它。

事实上,没有立即删除任何内容;甚至git rebase从一个分支"移动"到另一个分支的提交实际上也被复制了,并且原始文件仍在存储库中,它们是可访问的,但不可见。

在 Git 网站上阅读有关git rebase的更多信息,或在终端上运行git help rebase

相关内容

最新更新