假设我有一个由三个提交组成的分支,其中一个是空的:
# On branch test
3208910 empty
85c949c bar
0c1a615 foo
我想在root用户上重新定义它,并且从手册页看来--root --keep-empty
正是我需要的。
但是,git rebase -i --root
和git 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}}。
答案 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 a35413c的Elijah 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
指针进行段错误处理)。
cannot combine '--root' with '--fork-point'