在root上重新生成并保持空提交

时间:2015-12-30 12:37:46

标签: git

假设我有一个由三个提交组成的分支,其中一个是空的:

# On branch test
3208910 empty
85c949c bar
0c1a615 foo

我想在root用户上重新定义它,并且从手册页看来--root --keep-empty正是我需要的。

但是,git rebase -i --rootgit rebase -i --root --keep-empty都会省略空提交,而是向我展示此计划:

pick 0c1a615 foo
pick 85c949c bar

如何重新绑定整个分支并同时保留空提交?

P.S。我需要这个删除分支上的一些第一次提交,我设法使用this SO answer中描述的filter-branch来实现,但我仍然有兴趣知道rebase是否是pick 3208910能够做到这一点。我发现它是Git中的一个错误吗?很难相信这种行为是故意的,但我不确定。

P.P.S。我发现我可以手动编辑计划并添加{{1}}。

2 个答案:

答案 0 :(得分:1)

它与git rebase

这两种模式相关联

Patch-id 方法应保留空提交,并且是默认行为。

但是,正确精确定位后,--root标志是"到NULL"的快捷方式。这会触发 fork-point 模式。

可以从以下网址中扣除更多信息:

答案 1 :(得分:0)

--root标志是“ onto NULL”的快捷方式,它会触发分叉点模式。

Git 2.27(2020年第二季度)不再是这种情况,因为“ --root”的不兼容选项“ --fork-point”和“ git rebase”已被标记并记录为不兼容。

请参见commit a35413cElijah Newren (newren)(2020年4月27日)。
(由Junio C Hamano -- gitster --commit 6d6b412中合并,2020年5月1日)

rebase:如果同时提供了--root--fork-point,则会显示错误

报告人:亚历山大·伯格
文档作者:阿尔班·格鲁因(Alban Gruin)
签名人:伊利亚·纽伦

  • --root表示我们希望重新设置自历史记录以来的所有提交。

  • --fork-point意味着我们要使用指定上游的reflog在<upstream><branch>之间找到最佳的共同祖先,并且仅从该共同祖先开始重新提交提交。 / p>

这些选项显然是矛盾的,因此,如果同时指定了两个选项,则会引发错误(而不是对NULL指针进行段错误处理)。

The error will be

cannot combine '--root' with '--fork-point'