首页 > 解决方案 > 在 git 中列出远程标签时,“^{}”表示什么?

问题描述

当我git ls-remote --tags列出远程标签时,我得到如下响应:

45d3d8f01f5e07a0e2728012b3d50989e5971cb2        refs/tags/v1.4.6.7
c742bfaa5d2140bbbed5bb9202b30cabcb9eb531        refs/tags/v1.4.6.7^{}
a745b6d8997803e1af823582885ab17f0dba2d8e        refs/tags/v1.4.6.8
b867af5cb9469f6cfc139d355a5e7e4fc9b55a12        refs/tags/v1.4.6.8^{}

^{}意味着什么(我应该担心)?

标签: gitgithub

解决方案


您看到的是一个“带注释的”标签和它指向的提交(^在这种情况下是指第一个直接父级)。例如,在您的情况下c742bfaa5d2140bbbed5bb9202b30cabcb9eb531refs/tags/v1.4.6.7.

这是一个完整的例子:

zrrbite@ZRRBITE MINGW64 /d/dev/git/reftest                                                    
$ git init                                                                                    
Initialized empty Git repository in D:/dev/git/reftest/.git/                                  
                                                                                          
zrrbite@ZRRBITE MINGW64 /d/dev/git/reftest (master)                                           
$ touch test                                                                                    
                                                                                          
zrrbite@ZRRBITE MINGW64 /d/dev/git/reftest (master)                                           
$ git add-commit -m "hej"                                                                     
[master (root-commit) d792079] hej                                                            
 1 file changed, 1 insertion(+)                                                               
 create mode 100644 test                                                                      
                                                                                          
zrrbite@ZRRBITE MINGW64 /d/dev/git/reftest (master)                                           
$ git clone --bare . /d/dev/git/reftest_bare                                                  
Cloning into bare repository 'D:/dev/git/reftest_bare'...                                     
done.                                                                                         
                                                                                          
zrrbite@ZRRBITE MINGW64 /d/dev/git/reftest (master)                                           
$ git remote add origin ../reftest_bare/                                                      
                                                                                          
zrrbite@ZRRBITE MINGW64 /d/dev/git/reftest (master)                                           
$ git fetch origin                                                                            
From ../reftest_bare                                                                          
 * [new branch]      master     -> origin/master                                              
                                                                                          
zrrbite@ZRRBITE MINGW64 /d/dev/git/reftest (master)                                           
$ git branch -u origin/master                                                                 
Branch 'master' set up to track remote branch 'master' from 'origin'.                         
                                                                                          
zrrbite@ZRRBITE MINGW64 /d/dev/git/reftest (master)                                           
$ git tag -a 1.0 -m "test"                                                                    
                                                                                          
zrrbite@ZRRBITE MINGW64 /d/dev/git/reftest (master)                                           
$ git push                                                                                    
Everything up-to-date                                                                         
                                                                                          
zrrbite@ZRRBITE MINGW64 /d/dev/git/reftest (master)                                           
$ git push --tags                                                                             
Enumerating objects: 1, done.                                                                 
Counting objects: 100% (1/1), done.                                                           
Writing objects: 100% (1/1), 158 bytes | 158.00 KiB/s, done.                                  
Total 1 (delta 0), reused 0 (delta 0)                                                         
To ../reftest_bare/                                                                           
 * [new tag]         1.0 -> 1.0                                                               
                                                                                          
zrrbite@ZRRBITE MINGW64 /d/dev/git/reftest (master)                                           
$ git ls-remote --tags                                                                        
From ../reftest_bare/                                                                         
79d1f428cb16028a2f8b0e0599231eae2ba76b0b        refs/tags/1.0                                 
d7920790cb316067be54ec15e4a7d27265c08fc4        refs/tags/1.0^{}                              
                                                                                          
zrrbite@ZRRBITE MINGW64 /d/dev/git/reftest (master)                                           
$ git show 79d1f428cb16028a2f8b0e0599231eae2ba76b0b                                           
tag 1.0                                                                                       
Tagger: Martin Kjeldsen <>                                                  
Date:   Thu Oct 8 20:28:14 2020 +0200                                                         
                                                                                          
test                                                                                          
                                                                                          
commit d7920790cb316067be54ec15e4a7d27265c08fc4 (HEAD -> master, tag: 1.0,     origin/master)     
Author: Martin Kjeldsen <>                                                  
Date:   Thu Oct 8 20:27:12 2020 +0200                                                         
                                      

请注意d7920790cb316067be54ec15e4a7d27265c08fc4标记如何指向提交,1.0以及根据您的问题它在远程标记列表中的表示方式。如果我只是简单地推送一个轻量级标签,test它在远程标签列表中是独立的,因为它没有被真正的 git 对象引用。

zrrbite@ZRRBITE MINGW64 /d/dev/git/reftest (master)
$ git tag test

zrrbite@ZRRBITE MINGW64 /d/dev/git/reftest (master)
$ git push origin test
Total 0 (delta 0), reused 0 (delta 0)
To ../reftest_bare/
 * [new tag]         test -> test

zrrbite@ZRRBITE MINGW64 /d/dev/git/reftest (master)
$ git ls-remote --tags
From ../reftest_bare/
79d1f428cb16028a2f8b0e0599231eae2ba76b0b        refs/tags/1.0
d7920790cb316067be54ec15e4a7d27265c08fc4        refs/tags/1.0^{}
d7920790cb316067be54ec15e4a7d27265c08fc4        refs/tags/test                                                                                                          

推荐阅读