git name rev标记语法含义?

git name rev标记语法含义?,git,Git,我正在我的主分支上运行git name rev'git rev list master'。从输出列表中,我看到了以下标记/版本格式: <SHA-1 Hash> tag/version-0.8.7 <SHA-1 Hash> tag/version-0.8.7~1 <SHA-1 Hash> tag/version-0.8.7~2 <SHA-1 Hash> tag/version-0.8.7~2^0 <SHA-1 Hash> tag/vers

我正在我的主分支上运行
git name rev'git rev list master'
。从输出列表中,我看到了以下标记/版本格式:

<SHA-1 Hash> tag/version-0.8.7
<SHA-1 Hash> tag/version-0.8.7~1
<SHA-1 Hash> tag/version-0.8.7~2
<SHA-1 Hash> tag/version-0.8.7~2^0
<SHA-1 Hash> tag/version-0.7.6~10^2~2
tag/version-0.8.7
标签/版本-0.8.7~1
标签/版本-0.8.7~2
标签/版本-0.8.7~2^0
标签/版本-0.7.6~10^2~2
我被
~
^
和文档(下面的链接)弄糊涂了:

~[],例如,头~,主人~3 修订参数的后缀~表示提交对象的第一个父对象。修订参数的后缀表示提交对象,它是命名提交对象的第th代祖先,仅位于第一个父级之后。也就是说~3相当于^1^1^1

那么,
tag/version-0.8.7~2
是否意味着在tag/version-0.8.7之前有两个已提交的更改?“第十代祖先”是什么意思

^[],例如HEAD^,v1.5.1^0 修订参数的后缀“^”表示提交对象的第一个父对象。^表示第th个父项(即,^相当于^1)。作为特殊规则,^0表示提交本身,当是引用提交对象的标记对象的对象名时使用

tag/version-0.8.7~2^0
是否表示两个提交的更改本身(导致^0的原因)

希望我能得到澄清。 还有一种方法可以在制作标签时不显示这些
~
^
? 多谢各位

警告:这个答案很长,没有TL;博士在顶端

我不完全确定你在问什么,特别是在这一部分:

还有没有办法在制作标签时不显示这些~和^

制作标记时,您可以自己选择名称。您不能在您选择的名称中嵌入
~
^
字符,请参见中的规则4,因此它们永远不会成为任何标记的一部分

git name rev
命令在借用现有的有效名称时,向其添加
~
^
字符,但仅在必要时才添加。要理解这里发生了什么,您需要了解一点,Git的提交形成了一个有向无环图或

。。。
tag/version-0.8.7~2
是否表示在tag/version-0.8.7之前有两个已提交的更改

有点。不过,抛弃“两次承诺的改变”这句话是个好主意。Git的提交不是更改。提交表示所有文件的完整快照


Git存储库中的每一次提交都是真实的:可以说是可以取出并检查的实体。把它们想象成袋子里的弹珠,或者建筑物里的砖块,或者你喜欢的任何类比。如果你用“建筑物中的砖块”来比喻,那么建筑物(整个收藏)确实不是砖块,仅仅拥有一块砖块并不能让你得到建筑物,但同时,每一块砖块都是真实的。它不是一个抽象的概念(尽管这个概念本身确实存在;如果你愿意,你可以想象一块“完美的砖块”,没有瑕疵或瑕疵,但你永远找不到一块没有瑕疵的砖块:见)。如果你从大楼里拿出一块真正的砖,它是实心的,你可以用它敲打某人的头部。(哦!别这样!嗨,托雷克,我真的很感谢你花时间和精力来提供如此透彻和深入的解释。我绝对喜欢你画的图。它使理想更加清晰。从长远来看,这对我真的很有帮助!特别感谢你让我了解git中涉及的图论。我当然喜欢参观一旦新冠病毒消失,意大利的普尼酿酒厂