我找不到当前签出的标签。

当我这样做的时候:

git checkout tag1
git branch

我好像找不出我在哪个标签上。它只记录:

* (no branch)
master

是否有可能找出哪些标签被签出?在上面的例子中,这将是tag1。


当前回答

下面是一组特定用例的有趣示例。如果您的存储库有v1.0.0、v1.1.0、v1.1.1等版本,以及像v1这样指向最新v1.x的简写版本。X,下面将给你一个当前签出的提交与最新的完整版本化标记的引用,如果这不起作用,则提供回退:

git describe --tags --exact-match --match "v*.*.*" \
  || git describe --match "v*.*.*" --tags \
  || git describe --tags \
  || git rev-parse HEAD

假设你有以下提交:

* 4444444 (main, origin/main, tag: v2.0.0, tag: v2.0, tag: v2)
* 3333333
* 2222222 (tag: v1.1.0, tag: v1.1, tag: v1)
* 1111111 (tag: v1.0.0, tag: v1.0)
* 0000000

上面的命令输出的几个例子:

Git checkout main -> v2.0.0 Git checkout 3333333 -> v1.1.0-1-g3333333 Git checkout 2222222 -> v1.1.0 Git checkout v1 -> v1.1.0 Git校验0000000 -> 0000000(完整引用)

其他回答

下面是一组特定用例的有趣示例。如果您的存储库有v1.0.0、v1.1.0、v1.1.1等版本,以及像v1这样指向最新v1.x的简写版本。X,下面将给你一个当前签出的提交与最新的完整版本化标记的引用,如果这不起作用,则提供回退:

git describe --tags --exact-match --match "v*.*.*" \
  || git describe --match "v*.*.*" --tags \
  || git describe --tags \
  || git rev-parse HEAD

假设你有以下提交:

* 4444444 (main, origin/main, tag: v2.0.0, tag: v2.0, tag: v2)
* 3333333
* 2222222 (tag: v1.1.0, tag: v1.1, tag: v1)
* 1111111 (tag: v1.0.0, tag: v1.0)
* 0000000

上面的命令输出的几个例子:

Git checkout main -> v2.0.0 Git checkout 3333333 -> v1.1.0-1-g3333333 Git checkout 2222222 -> v1.1.0 Git checkout v1 -> v1.1.0 Git校验0000000 -> 0000000(完整引用)

Git描述的是一个瓷器命令,你应该避免:

http://git-blame.blogspot.com/2013/06/checking-current-branch-programatically.html

相反,我使用:

git name-rev --tags --name-only $(git rev-parse HEAD)

显示当前HEAD上的所有标签(或提交)

git tag --points-at HEAD

Git日志—装饰

这将告诉你哪些引用指向当前签出的提交。

这对我有用git describe -tags -abbrev=0

编辑2020:正如下面的一些评论所提到的,这可能对你有用,也可能没用,所以要小心!