不一致的 git rev-list 计数

iva*_*esp 2 git

我正在使用 zsh 自定义提示符,我试图显示我的分支前后有多少提交。为此,我使用以下命令

git rev-list --left-right --count main...origin/main
Run Code Online (Sandbox Code Playgroud)

它返回a b其中 a 是本地提交领先于远程的提交,b 是远程提交领先于本地的提交。

我发现了一个我无法正确理解的不一致之处。复制代码如下

git clone https://github.com/numpy/numpy
cd numpy
git rev-list --left-right --count main...origin/main
#  0     0  # As expected

git reset --hard HEAD~10
git rev-list --left-right --count main...origin/main
#  0     31  # Whaaaaaaat?

Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解我错过了什么吗?

谢谢

tor*_*rek 5

正如phd 在注释中指出的那样,通过某个分支名称从可达性中删除一个合并提交通常会从可达性中删除多个提交。鉴于 numpy 存储库在其主分支上有大量合并,您看到的结果并不令人惊讶。

下面是一个示例(并非特定于 numpy 存储库),其中删除一个合并提交会从可达性中删除四个提交:

...--G--H------L--M   <-- main (HEAD), origin/main
         \       /
          I--J--K   <-- feature
Run Code Online (Sandbox Code Playgroud)

分支feature刚刚合并到分支main(然后推送),因此 commits ML-and- KJIHG、 等都是可到达的,从提交M到哪个main点向后工作。

main直接指向,L就像我们使用 a 那样,会删除来自 的git reset --hard HEAD~1提交,但也会删除提交。因此,在重置之后,您将“领先零”和“落后四” 。MmainI-J-Korigin/main