gpt4 book ai didi

git - 两个提交之间的提交数

转载 作者:IT王子 更新时间:2023-10-29 01:11:59 26 4
gpt4 key购买 nike

如何在 git 中找到两个提交之间的提交数?

此外,有什么方法可以让我对 GitHub 上的任何项目执行相同的操作(使用 UI,而不是 API)?

最佳答案

在我给你答案之前,请考虑这个提交图:

        o -----------
/ \
... - A - o - o - o - B
\ /
o ----- o

每个 o 都代表一次提交,AB 也是如此(它们只是让我们讨论特定的字母 promise )。提交 AB 之间有多少次提交?

就是说,在更线性的情况下,只需使用 git rev-list --count A..​​B 然后确定您所说的“介于”是什么意思(它包含 B 并排除 A 吗?这就是 git rev-list --count 的行为)。在像这样的分支情况下,您将获得所有分支下的所有提交;例如,添加 --first-parent 以仅遵循“主线”。

(您还提到了“commitish”,暗示我们可能有带注释的标签。这不会影响 git rev-list 的输出,它只计算特定的提交。)


编辑:由于 git rev-list --count A..​​B 包含提交 B(同时省略提交 A),并且您想排除两个端点,你需要减去一个。在现代 shell 中,您可以使用 shell 算术来做到这一点:

count=$(($(git rev-list --count A..B) - 1))

例如:

$ x=$(($(git rev-list --count HEAD~3..HEAD) - 1))
$ echo $x
2

(这个特定的 repo 有一个非常线性的图形结构,所以这里没有分支,并且有两个提交“介于”提示和 three-behind-the-tip 之间)。但是请注意,如果 AB 标识相同 提交,这将产生 -1:

$ x=$(($(git rev-list --count HEAD..HEAD) - 1))
$ echo $x
-1

所以你可能想先检查一下:

count=$(git rev-list --count $start..$end)
if [ $count -eq 0 ]; then
... possible error: start and end are the same commit ...
else
count=$((count - 1))
fi

关于git - 两个提交之间的提交数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31997999/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com