我有一个存储库,在同一个提交中有多个标记.例如:
commit #3 <--- TAG1 / TAG2 / TAG3
|
commit #2 <--- TAG4/ TAG5
|
commit #1 <--- TAG6/ TAG7
Run Code Online (Sandbox Code Playgroud)
我想找出特定提交中的标记.例如,如果我检查提交1,我想获得标记6和标记7.
我试过了:
git checkout <commit 1>
git tag --contains
Run Code Online (Sandbox Code Playgroud)
显示标签1-7.
git checkout <commit 1>
git describe --tags HEAD
Run Code Online (Sandbox Code Playgroud)
仅显示标签6.
在Git中这样做的正确方法是什么?
小智 109
为了完成(感谢Ciro Santili的回答),git-tag有了选项 - points-at就像Shawn所要求的那样.
git tag -l --points-at HEAD
Run Code Online (Sandbox Code Playgroud)
正如Jonathan Hartley在他对git-tag --contains的评论中所说的那样,它也无法列出正向提交的标签.
arc*_*mac 23
我想也许git已经添加了一些选项,因为这个问题被问到了,但是因为它在谷歌上仍然相当高,我想我会补充说这种方式很好用:
git tag -l --contains HEAD
Run Code Online (Sandbox Code Playgroud)
或者替换HEAD为您喜欢的任何其他有效提交引用.
如果HEAD包含任何标记,这将打印换行符分隔的新行,并且不打印任何标记,因此您将获得:
TAG6
TAG7
Run Code Online (Sandbox Code Playgroud)
当然,有很多很好的方法可以使用各种其他shell工具,一旦你拥有它就可以格式化输出...
Jos*_*Lee 18
威廉回答的一些改进:
git config --global alias.tags 'log -n1 --pretty=format:%h%d'
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
~$ git tags
7e5eb8f (HEAD, origin/next, origin/master, origin/HEAD, master)
~$ git tags HEAD~6
e923eae (tag: v1.7.0)
Run Code Online (Sandbox Code Playgroud)
这将显示 HEAD 的提交 ID,以及恰好位于 HEAD 的任何分支或任何标签。
git reflog --decorate -1
Run Code Online (Sandbox Code Playgroud)
示例输出:
484c27b (HEAD, tag: deployment-2014-07-30-2359, master, origin/master) HEAD@{0}: 484c27b878ca5ab45185267f4a6b56f8f8d39892: updating HEAD
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25552 次 |
| 最近记录: |