当我签出远程git标签使用命令像这样:

git checkout -b local_branch_name origin/remote_tag_name

我得到了这样的错误:

错误:pathspec origin/remote_tag_name不匹配git已知的任何文件。

当我使用git tag命令时,可以找到remote_tag_name。


当前回答

当我想要标记上的代码时,我可能不想创建一个分支(通常,如果我要热修复它,我只需要一个完整的分支)。

要临时倒回你的分支到标记处的代码,可以这样做:

git reset --hard tags/1.2.3

我可以根据需要简单地使用它,然后当我完成时回到分支的HEAD,使用简单的git拉。

其他回答

为了签出git标记,您将执行以下命令

git checkout tags/tag-name -b branch-name

如下文所述。

 git checkout tags/v1.0 -b v1.0-branch

要查找远程标签:

git ls-remote --tags origin

使用给定的标记消息创建一个标记

git tag <tag_name> -a -m "tag message"

将单个标签推送到远程

git push origin <tag_name>

将所有标签推至远程

git push origin --tags

当我想要标记上的代码时,我可能不想创建一个分支(通常,如果我要热修复它,我只需要一个完整的分支)。

要临时倒回你的分支到标记处的代码,可以这样做:

git reset --hard tags/1.2.3

我可以根据需要简单地使用它,然后当我完成时回到分支的HEAD,使用简单的git拉。

要获得特定的标记代码,请尝试创建一个新分支,并在其中添加标记代码。 我已经通过命令完成了:$git checkout -b newBranchName tagName

让我们从解释git中的标签开始

标记用于标记历史记录中的特定提交。 它通常用来标记释放点(例如。v1.0,等等)。

尽管标记可能看起来类似于分支,但是标记不会改变。它直接指向历史记录中的特定提交,除非显式更新,否则不会更改。


如果标记不在本地存储库中,则无法签出标记,因此首先必须将标记获取到本地存储库。

首先,通过执行,确保标记在本地存在

# --all will fetch all the remotes.
# --tags will fetch all tags as well
$ git fetch --all --tags --prune

然后通过运行来检查标签

$ git checkout tags/<tag_name> -b <branch_name>

使用标签/前缀代替origin。


在这个例子中,你有2个标签版本1.0和版本1.1,你可以检查他们与任何以下:

$ git checkout A  ...
$ git checkout version 1.0  ...
$ git checkout tags/version 1.0  ...

上面所有的标记都将做同样的事情,因为标记只是一个指向给定提交的指针。

来源:https://backlog.com/git-tutorial/img/post/stepup/capture_stepup4_1_1.png


如何查看所有标签的列表?

# list all tags
$ git tag

# list all tags with given pattern ex: v-
$ git tag --list 'v-*'

如何创建标签?

有两种方法来创建一个标签:

# lightweight tag 
$ git tag 

# annotated tag
$ git tag -a

两者的区别在于,当创建一个带注释的标签时,你可以添加元数据,就像在git提交中一样: 姓名,电子邮件,日期,评论和签名

如何删除标签?

删除本地标签

$ git tag -d <tag_name>
Deleted tag <tag_name> (was 000000)

注意:如果你试图删除一个不存在的Git标签,将会看到以下错误:

$ git tag -d <tag_name>
error: tag '<tag_name>' not found.

删除远程标签

# Delete a tag from the server with push tags
$ git push --delete origin <tag name>

如何克隆一个特定的标签?

为了获取给定标记的内容,可以使用checkout命令。如上所述,标记就像任何其他提交一样,所以我们可以使用签出,而不是使用SHA-1,只需将其替换为tag_name

选项1:

# Update the local git repo with the latest tags from all remotes
$ git fetch --all

# checkout the specific tag
$ git checkout tags/<tag> -b <branch>

选项2:

使用clone命令

因为git通过在clone命令中添加——branch来支持浅克隆,所以我们可以使用标记名而不是分支名。Git知道如何将给定的SHA-1“转换”到相关的提交

# Clone a specific tag name using git clone 
$ git clone <url> --branch=<tag_name>

Git克隆——branch= ——branch也可以在最终的存储库中使用标记并分离提交时的HEAD。


如何推送标签?

Git push—标签

推送所有标签:

# Push all tags
$ git push --tags 

使用refs/标签,而不是仅仅指定<tagname>。

Why?

建议使用refs/tags,因为有时候标签可能与你的分支有相同的名称,简单的git push将会推送分支而不是标签

要推送带注释的标签和当前历史链标签,请使用:

Git push—follow-tags

这个标志——follow-tags同时推送提交和同时推送的标签:

注释标记(因此您可以跳过本地/临时构建标记) 来自当前分支(位于历史记录上)的可达标记(祖先)

在Git 2.4中,您可以使用配置来设置它

$ git config --global push.followTags true

Cheatsheet:


这有点断章取义,但如果你在这里,因为你想标记一个特定的提交,就像我做的

这里有一个这样做的命令:-

例子:

git tag -a v1.0 7cceb02 -m "Your message here"

其中7cceb02是提交id的开始部分。

然后,您可以使用git push origin v1.0推送标记。

你可以使用git log来显示当前分支中所有的提交id。