是否可以计算特定提交的 parents 数量?

Is it possible to count the number of parents an especific commit has?

大多数提交有 1 parent 次提交。然而,一些提交有多个 parents。例如,在 --no-ff(无 fast-forward)标志下创建的合并提交至少有 2 parents.

git 中是否有命令显示特定提交的 parent 的确切数量?

查看父提交列表:

git show -s --format=%p [commit-id]

只显示家长人数:

git show -s --format=%p [commit-id] | wc -w

解释:

对于随意或人类可读的答案,请使用 git show,如

然而,尽管 --format 的使用是干净的,但 git show 的输出是允许改变的:它是一个 "porcelain command" in git's "plumbing/porcelain separation". () 改变可能不太可能,但你可能还会看到错误和其他人为指导的输出,因为 git show 旨在供人使用而不是脚本使用。

要获得更严格或有规范保证的父级列表,适用于长期 shell 脚本或工具集成,您需要使用 plumbing command like git cat-file, similar to .

git cat-file -p [commit-id] | sed -ne '/^$/q;/^parent/p' | wc -l
  • git cat-file -p 将漂亮地打印具有给定 ID 的对象。 HEAD 等修订也适用于此处。
  • sed 这里将同时过滤和截断输出:
    • -n 抑制所有输出。
    • -e 使用命令行指定的脚本。
    • /^$/q 告诉 sed 如果看到空行就退出,比如将提交元数据与其消息分开的行。这可以防止在您的提交正文中误解“父”一词。
    • ; 分隔 sed 个命令。
    • /^parent/p 告诉 sed 只打印以 parent 开头的行,覆盖 -n.
  • wc -l 打印结果行数。

再一次,对于大多数情况,git show 是一种更惯用的方法,因为它在一个命令中读取和解析所有提交,并且已经在编写时考虑到了边缘情况和奇怪之处。但是,对于长期 git 工具的开发人员来说,管道命令可能是更有保障的解决方案。