当我签出远程git标签使用命令像这样:
git checkout -b local_branch_name origin/remote_tag_name
我得到了这样的错误:
错误:pathspec origin/remote_tag_name不匹配git已知的任何文件。
当我使用git tag命令时,可以找到remote_tag_name。
当我签出远程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。