为什么`git cherry-pick --allow-empty`没有效果?

9

如果我选择了一个没有进行更改的提交,但是我仍然想要提交它(以便提交的审计跟踪与另一个项目保持一致),那么我会得到以下提示信息:

$ git cherry-pick 696abcb
...
nothing to commit, working directory clean
The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

     git commit --allow-empty

根据手册,我可以使用 cherry-pick 命令并添加参数 --allow-empty。但这会导致出现相同的消息:
$ git cherry-pick --allow-empty 696abcb

这是一个bug吗?我完全误解了这个选项的意义吗?

2
“--allow-empty” 标志主要用于在挑选一系列提交时使用。如果没有该标志,序列控制器将在该范围内省略空提交。尽管如此,我认为它的效果还不够理想。 - torek
什么是API漏洞? - ribamar
2个回答

4

在 Git 2.22 (2019 年第二季度) 中,您不再需要运行 git commit --allow-empty


"git cherry-pick --options A..B" 在将控制权交还给用户以请求帮助解决冲突步骤后,没有遵守其最初接收到的选项,这一点已得到纠正。

查看 提交 6860ce5, 提交 36b0503, 提交 f59199d (2019年3月13日) 由 Phillip Wood (phillipwood) 提交。
(由 Junio C Hamano -- gitster -- 合并于 提交 d2dba18, 2019年4月25日)

cherry-pick --continue: 记住选项

当 cherry-pick 因冲突解决而停止时,记住 --allow-empty--allow-empty-message--keep-redundant-commits 选项。


3
“--keep-redundant-commits” 对我很有帮助。 - Asbjørn Ulsberg

3

既然没有需要挑选的内容,那就没有工作可以做了。唯一可能做的事情就是创建一个空的提交。这并不是在指示你运行git cherry-pick --allow-empty,而是在指示你运行:

git commit --allow-empty

注意这是 commit 命令。git 默认不会创建没有变更的提交。
(git 质疑在历史记录中创建空提交只为了包含提交信息的价值,老实说我也质疑这个做法,但如果您需要进行审计,那么这是一种方法。)

问题是正确的,只是解释“由于没有要挑选的内容,因此无法进行任何工作。”是错误的。您可以挑选添加文件(如.gikeep)的提交:有工作可以做。 git cherry-pick --allow-empty sha 可以挑选那个“空”提交,但 API 设计者理解挑选空提交,即使明确声明了“--allow-empty”,也与不做任何事情相同... - ribamar
问题是正确的,只是解释“由于没有要挑选的内容,所以没有工作可以做。”是错误的。你可以挑选一个添加了文件(比如.gitkeep)的提交:有工作可以做。git cherry-pick --allow-empty sha可以挑选那个“空”提交,但API设计者们理解挑选一个空提交,即使明确指定了“--allow-empty”,与不做任何操作是一样的。 - ribamar
(I meant the "answer") - ribamar
不,这个问题不是关于“挑选”一个“空”提交。在这种情况下,提交并不是空的,但它已经被应用了(通过不同的cherry-pick或合并等)。所以没有什么可做的,cherry-pick已经停止了。如果你仍然想创建一个空的提交,那么你可以在这个时候运行git commit --allow-empty(而不是cherry-pick)。 - Edward Thomson

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