如何将 git tag 指向特定的提交 ID?
例如:我有以下提交
#git log 6470098 变更1 b72099b 变更2 1514994 变更3 068bf4c 变更4
我需要标记1514994. 我要怎么做呢?
我在公司介绍Git。我有几个都通过套接字一起交互的应用程序,现在,将决定我是否应该使用
我也想使用标签进行修订;如果使用分支,则必须像branchnameV1.0, but if I use separate Git projects I could tag likev1.0 一样标记。
最常规的方法是什么?
给定一个 GitPython Commit 对象,如何获取与此提交相关的标签?
我喜欢有这样的东西:
next(repo.iter_commits()).tags
Run Code Online (Sandbox Code Playgroud) git branch -avv显示所有分支(包括远程分支),用跟踪分支、短 SHA 和提交标题装饰它们。是否有类似的命令来显示所有标签及其指向的提交,可选地包括是否将其推送到上游,以及如果标签被注释的话还包含消息?
到目前为止我能得到的最好的结果是:
git tag --format '%(color:green)%(refname:short)%09%(color:white)%(objectname:short) %(contents:subject)'
Run Code Online (Sandbox Code Playgroud)
但这有几个问题:
%09(a \t) 的对齐失败%(objecttype)将其显示为 或commit,tag但我更喜欢下一行的标签注释之类的内容)%(objectname:short)结果是带注释标签的标签SHA,而我想知道它们指向什么。最后两个归结为基本上想要git show-refs --tags -d显示什么,但这并没有提供--format。
我的 git 存储库遇到了一个奇怪的问题。它突然“停止”使用标签。我可以创建标签,我可以列出标签。我什至可以使用git checkout $tag或git logs $tag。但是当使用git describe --exact-match标签时就不再检测到了?这目前破坏了我的管道,因为 master 上的标记提交似乎没有标记到 git 本身?一周前,它运行得非常完美。
$ git checkout master
$ git tag my-test-tag
$ git describe --exact-match
fatal: no tag exactly matches '4b2aa1dcf70eaf61640e6a983df82e1ffe3a5812'
Run Code Online (Sandbox Code Playgroud)
我已经尝试过运行git fsck --full,它只修复了一些悬空的提交,这对我来说看起来很好(因为我进行了很多变基)。
另一个有趣的事情是:该工具gitg没有显示这些“新”提交的任何历史记录。而对于“旧”承诺,一切都按预期进行。
有人知道这里发生了什么事吗?
在 3 台机器上测试,全部运行 git 版本 2.17.1。
列出带有注释的所有标签似乎很容易,例如:
git tag -n99
Run Code Online (Sandbox Code Playgroud)
或者
git for-each-ref --format '%(refname:short) %(contents)' refs/tags
Run Code Online (Sandbox Code Playgroud)
也可以用于git log按创建者日期列出标签,例如(来自此处):
git log --tags --simplify-by-decoration --pretty="format:%cs %d"
Run Code Online (Sandbox Code Playgroud)
然而,这些都没有回答问题,因为据我所知:
git tag,因为标签指向标签注释对象,因此committerdate为空。您可以通过以下方式确认这一点git tag --format='%(committerdate)'
creatordate提交日期,以及带注释提交的标签创建日期,这对于这个问题来说也是无用的。git log,因为格式化程序中没有标签注释选项(而且这无论如何都没有意义,因为单个提交可以有多个标签。那么,有没有一种方法可以列出所有标签,按提交日期排序,并显示提交日期和注释?我不关心这个问题的未注释标签。
当我使用Mercurial时,我曾经将标记作为提交 - 至少在TortoiseHG中,它在添加标记时创建了一个提交.当我尝试使用Git时,我很失望 - 它没有为标记创建提交,而且 - 当我从Intellij IDEA提交时,我必须选中一个复选框来将标记提交到存储库.是否可以在Git中添加标签,并将其作为提交,与Mercurial完全相同?非常感谢你的每一个答案.
和
git reflog
Run Code Online (Sandbox Code Playgroud)
输出日志看起来像这样
8b388bc (HEAD -> master) HEAD@{0}: commit (amend): tempppp22222
7c33c70 (tag: v2.0) HEAD@{1}: commit: tempppp
76702b2 (origin/master, origin/HEAD) HEAD@{2}: reset: moving to HEAD^
fc1ea9d HEAD@{3}: commit (amend): temp2
0bc8223 (tag: v1.0) HEAD@{4}: reset: moving to 0bc8223
Run Code Online (Sandbox Code Playgroud)
但当我尝试时
git reflog | grep "HEAD@{1}"
Run Code Online (Sandbox Code Playgroud)
输出看起来像这样
7c33c70 HEAD@{1}: commit: tempppp
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我为什么标签名称丢失吗?
我有一个 git 分支和一个 git 标签,它们在本地和远程都具有相同的名称和多个斜杠。
我想写一个bash脚本调用git命令删除本地分支和本地标签,然后是远程分支和远程标签。
对于此示例,假设分支/标签名称为: production/2020/12/10
该分支/标签名称是一个假设,可以找到适用于更好命名的分支/标签的解决方案。
任何帮助将不胜感激。
我的印象是标签会像提交一样,如果我有一个基于旧提交的克隆,我不希望看到git标签输出中列出的新标签.
但是,这种假设显然是错误的.它破坏了我计划使用标签的方式.我正在使用简单的标签.其他类型的标签会在时间上有所不同吗?