git rebase -i --retain-empty-commits

13
默认情况下,使用git rebase -i时会注释掉空提交记录,我需要取消注释(它们对我很有帮助)。是否有一种选项可以防止rebase命令做出不必要的假设,即我不想保留这些空提交记录?

1
你有没有阅读过 git-rebase 文档 - larsks
逐行查找,不要谷歌搜索。我找不到任何东西。 - Sridhar Sarnobat
我的错误,谢谢你的指导。 - Sridhar Sarnobat
2个回答

21

好的,这比预期的要容易:

git rebase -i --keep-empty

希望这篇文章能够加速其他人通过谷歌搜索找到答案。


3
使用Git 2.26(2020年第一季度),"git rebase" 默认使用合并后端(即驱动 "rebase -i" 的机制),同时允许 "--apply" 选项使用 "apply" 后端(例如,类似于 "format-patch piped to am" 的道德等价物)。
(可以设置 rebase.backend 配置变量进行自定义。)
作为此改进的一部分,--keep-empty 现在是默认值

请查看以下提交记录:commit 10cdb9fcommit 2ac0d62commit 8295ed6commit 76340c8commit 980b482commit c2417d3commit 6d04ce7commit 52eb738commit 8af14f0commit be50c93commit befb89ccommit 9a70f3dcommit 93122c9commit 55d2b6dcommit 8a997edcommit 7db00f0commit e98c426commit d48e5e2(于2020年2月15日),以及commit a9ae8fdcommit 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 拓扑结构,并且不试图在一般情况下说明这些标志应该如何行事。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接