为什么 git tag local 在推送后会在远程创建两个标签?

use*_*542 2 git git-workflow git-tag

我正在从分支 A 创建一个 git 分支 B。

$git checkout A
$git checkout -b B
Run Code Online (Sandbox Code Playgroud)

我更改了分支 B 中的一些文件,然后

$git add <files>
$git commit -m "a message"
Run Code Online (Sandbox Code Playgroud)

然后我在分支 B 处于活动状态时创建一个标签

$git tag -a <tag_name>
Run Code Online (Sandbox Code Playgroud)

我还在本地。

然后我结帐分支 A

$git checkout A
Run Code Online (Sandbox Code Playgroud)

将分支 B 合并到 A

$git merge B
Run Code Online (Sandbox Code Playgroud)

我推分支A

$git push origin A
Run Code Online (Sandbox Code Playgroud)

然后我推送标签,而我还在分支 A

$git push origin tag <tag_name>
Run Code Online (Sandbox Code Playgroud)

现在,如果我在遥控器上列出标签,我会通过以下方式看到两个标签:

$git ls-remote --tags

<tag_name>
<tag_name>^{}
Run Code Online (Sandbox Code Playgroud)

^{}附加到一个第二条目

有人可以解释这里的原因是什么吗?

为什么我在遥控器上看到两个标签?

在本地,只有一个

$git tag -l
<tag_name>
Run Code Online (Sandbox Code Playgroud)

我这样做的顺序是常见的吗?或者建议使用不同的顺序?我真的只想在分支 B(以及那里的所有文件)上添加一个标签。

tor*_*rek 5

现在,如果我在遥控器上列出标签,我会通过以下方式看到两个标签:

$git ls-remote --tags

<tag_name>
<tag_name>^{}
Run Code Online (Sandbox Code Playgroud)

你没有看到两个标签。这就是git ls-remote显示一个标签的方式,前提是这个标签是一个带注释的标签。第一个输出行显示标签本身,以及底层带注释的标签对象的哈希 ID。第二个输出行显示了^{}附加的标签和目标对象的哈希 ID (您标记的提交)。

您看到这两个的原因是 Git 协议公开了两个哈希 ID,git fetch以便高效工作。该git ls-remote命令仅使用 已经存在的内容git fetch,因此也显示了这一点。

如果您创建一个轻量级标签,则输出git ls-remote将只有一行,但通常不鼓励分发轻量级标签,因为它们不能携带任何附加信息,例如 PGP 签名。