git rebase -i
时会注释掉空提交记录,我需要取消注释(它们对我很有帮助)。是否有一种选项可以防止rebase命令做出不必要的假设,即我不想保留这些空提交记录?git rebase -i
时会注释掉空提交记录,我需要取消注释(它们对我很有帮助)。是否有一种选项可以防止rebase命令做出不必要的假设,即我不想保留这些空提交记录?好的,这比预期的要容易:
git rebase -i --keep-empty
希望这篇文章能够加速其他人通过谷歌搜索找到答案。
git rebase
" 默认使用合并后端(即驱动 "rebase -i
" 的机制),同时允许 "--apply
" 选项使用 "apply
" 后端(例如,类似于 "format-patch piped to am
" 的道德等价物)。--keep-empty
现在是默认值!
请查看以下提交记录:commit 10cdb9f,commit 2ac0d62,commit 8295ed6,commit 76340c8,commit 980b482,commit c2417d3,commit 6d04ce7,commit 52eb738,commit 8af14f0,commit be50c93,commit befb89c,commit 9a70f3d,commit 93122c9,commit 55d2b6d,commit 8a997ed,commit 7db00f0,commit e98c426,commit d48e5e2(于2020年2月15日),以及commit a9ae8fd,commit 22a69fd(于2020年1月16日),由Elijah Newren (newren
)提交。
(由Junio C Hamano -- gitster
--在commit 8c22bd9中合并,于2020年3月2日)
rebase (interactive-backend)
: 将 --keep-empty
设为默认选项Signed-off-by: Elijah Newren
不同的 rebase 后端对于起始为空的提交(即相对于其父提交没有变化)有不同的处理方法,--keep-empty
选项被添加以允许调整行为。
实际上,处理起始为空的提交与 commit b00bf1c9a8dd ("git-rebase
: make --allow-empty-message the default", 2018-06-27, Git v2.19.0-rc0 -- merge listed in batch #4) 很相似,该提交指出各种后端的行为通常更多是偶然而非设计。
那个提交所做的具体更改也非常相关,那里的大部分逻辑直接适用于此处。
在 'git commit' 中,除非提供覆盖标志,否则创建空提交会出错是很有道理的。
但是,一旦有人确定有一个罕见情况需要使用手动覆盖来创建这样的提交,必须采取额外步骤来保留这些故意提交,这是非常烦人和有害的。
当然,空提交非常罕见,这就是为什么不考虑它们的处理方式,并且人们倾向于推迟现有(意外)行为并假设存在原因,从而只是添加允许他们覆盖错误默认值的标志(在这种情况下为 --keep-empty
)。
修复交互式后端,使 --keep-empty
成为默认选项,就像我们之前对 --allow-empty-message
做的一样。
am
后端也应该修复,以便对于起始为空的提交具有 --keep-empty
语义,但除了记录失败的测试用例之外,此补丁不包括在内。
请注意,在 t3421
中有一个测试似乎是编写时期望 --keep-empty
不是默认选项的正确行为。
这个测试是在 commit 00b8be5a4d38 ("add tests for rebasing of empty commits", 2013-06-06, Git v1.8.4-rc0 -- merge) 中引入的,该提交是关注 rebase 拓扑结构的一系列提交的一部分,并且有一个 有趣的原始信封,其中指出
特别感谢您对测试用例意图的认可。
然后进入了一个关于其中许多测试的正确性的长篇例子。
因此,我认为该系列中的大多数测试都是为了尽可能多地使用不同的标志来测试 rebase 拓扑结构,并且不试图在一般情况下说明这些标志应该如何行事。