根据这个日志,很明显还有额外的彗星
* 100ef3f - (HEAD -> master) ss (4 hours ago)
* 6392bff - version 1.11 (27 hours ago)
| * c740677 - (tag: 1.11) version 1.11 (2 days ago)
|/
* bbc79f8 - test one (2 days ago)
* 2443876 - -updated gradle version **//** (4 days ago)
| * 4ef2ee2 - (tag: 1.10) -updated gradle version **//** (4 days ago) <Shahar bm>
|/
| * 2562070 - (origin/master, origin/HEAD) -updated gradle version **//**. (8 days ago)
|/
* 8e2dad6 - -merge. -added ws for **//** (9 days ago)
* 1820027 - final commit (9 days ago)
* 8b35461 - test commit (9 days ago)
* 0d69468 - -changes in **//** . (2 months ago)
* 1f12302 - (tag: 1.09) Version 1.09 (3 months ago)
* 51cb421 - -added **//**
* ad0ecef - -git init. (5 months ago)
也仅来自 UI 的图像
所以有一个假设感谢@NickVolynkin,这些提交是由于使用命令而创建的git commit --amend
但据我了解,此命令应将当前更改添加到最后一次提交
为什么要创建一个新的?

因为提交是不可变的。它的标识符,一个散列,取决于它的内容。更改内容 - 哈希更改,您将获得具有不同 ID的提交,但来自与当前提交相同的基础。
抱怨这个就像抱怨如果你在 5 上再加一个,你会得到一个完全不同的数字。
:)git commit --amend“忘记”当前提交,采用旧提交所基于的相同提交*,在其之上进行新提交*,同时考虑索引**的内容并将分支推送到结果结果。现有提交没有真正的变化。其实很好。这消除了“某处意外发生变化”系列中的惊喜。对于版本控制系统,这是一个很好的特性。
因此,有一种做法:
...否则你可以看到它会导致什么。
然而,该系统并不完美,最近关于Git 内部使用的 SHA-1 黑客攻击的消息引起了人们的怀疑,即是否有可能在 Git 不怀疑的情况下用一些剩余的更改来伪造哈希。
现在担心这个还为时过早,除了最大的 IT 巨头。在实践中,还使用了数据的长度,这使得很难按数量级选择碰撞。这已经很不容易了,实际上是不现实的:已知的黑客攻击案例需要大约 6500 个 CPU 年。你需要一个很好的理由为每个这样的操作分配这么多的资源。
* 或多个提交,如果合并提交被替换
** 那里,如果有的话,所有跟踪的文件,而不仅仅是更改的文件,所以如果分支突然开始指向另一个提交,与索引中的状态进行比较(因此,计算提交的更改)仍然有效正确地
*** 带有一堆“如果”:比方说,如果这不是您的个人分支机构,除了您之外没有人会指望它,如果是,那是您自己的错;一个很好的例子是他们各种 Git*-flow 的功能分支。
提交是一个不可变(immutable)对象。因此,所有“编辑”和“移动”提交的操作实际上都会创建新的操作——但与之前的操作非常相似。
我们的承诺是由什么组成的?
理论上
让我们仔细看看提交。每次提交都会保存以下数据:
rebase。实践中
您可以使用命令查看提交的内容
git cat-file commit <ссылка>。在这个例子# комментарии中,是我添加的,剩下的就是命令的输出。使用 SHA1 哈希函数“密封”提交的全部内容。此函数的值用作提交 ID。如果至少有什么变化,那么哈希函数的值将完全不同。
命令喜欢什么
commit --amend和rebase这些命令创建新的提交,但尽可能重用以前的内容。
例如,在帮助下
git commit --amend我们可以更改内容、消息、最后一次提交的作者。提交者和日期将自动更改为从设置user.name <user.email>和当前时间获取的那些。由于内容变了,哈希也变了——这意味着你不能在上一次提交的地方保存这个内容——你需要创建一个新的。