标签: git-tag

将git branch转换为git标签

我正在寻找将git分支转换为git标签的最佳和最安全的方法.当手动移植到svn存储库时,我基本上复制了我们所有的分支,并且我们为每个次要版本(1.1,1.2,1.3)都有一个分支,这一点可能并不是最好的方法,但为了速度,我对分支比当时的标签更舒服.我现在有分支1.5,1.6,1.7,1.8但是因为我们在任何给定时间只有1个版本的代码部署,我可能只需要最后一个版本作为分支,因为任何热修复需要进入该版本部署.所以我正在寻找将git分支转换为git标签的最佳方法.我想我有办法,但确定它有多好.

到目前为止我所做的是每个我想转换为标签的分支,我已经检查过以确保那些不在master分支中的分支中没有提交,所以我做了:

git log 1.5 ^master
git log 1.6 ^master
git log 1.7 ^master
Run Code Online (Sandbox Code Playgroud)

所有这些都没有给我任何回报,我认为这意味着这些分支中的所有提交都存在于master中.我这样做是因为我假设如果那些分支中的提交不在master中,我会在将分支转换为标记时丢失它们,因为标记只是一个提交而不是开发线的"指针".看起来很好,我的假设是我只需做:

git tag 1.5v 1.5
git tag 1.6v 1.6
git tag 1.7v 1.7
Run Code Online (Sandbox Code Playgroud)

然后我只需要在本地删除分支并将这些更改推送到远程存储库.这是将git分支转换为git标记的最佳方法吗?

我还有一个问题是,如果有人从1.7开始创建一个分支(没有人应该这样做)并且他们拉出删除该分支的更改,他们是否能够将这些更改合并到另一个分支(比如master)或者那种打破他们创建的分支?这是一个不应该发生的情况,因为除了最后一个版本之外没有人应该创建任何分支版本的分支,在这种情况下为1.8,但是人们并不总是正确地遵循过程,所以我想确保有一种方法如果它发生,解决这个问题.

git version-control git-tag

7
推荐指数
1
解决办法
3135
查看次数

Git - 无法删除远程分支

我做了一个无意中命名为"0.2"的git分支,它也是一个标签.

所以我试图从原点删除它:

$ git branch -rD origin/0.2
Deleted remote branch origin/0.2
Run Code Online (Sandbox Code Playgroud)

但是之后:

$ git fetch origin
 * [new branch]      0.2        -> origin/0.2
Run Code Online (Sandbox Code Playgroud)

这是我推动时的错误:

$ git push --force origin :0.2
error: dst refspec 0.2 matches more than one.
Run Code Online (Sandbox Code Playgroud)

所以我删除了远程标签:

$ git tag -d 0.2
$ git push origin :refs/tags/0.2
Run Code Online (Sandbox Code Playgroud)

仍然没有去:

$ git branch -rD origin/0.2
 * [new branch]      0.2        -> origin/0.2
Run Code Online (Sandbox Code Playgroud)
  1. 这是一个git bug吗?
  2. 除了标签和分支名称等于我之外,我做错了吗?
  3. 如何删除这个远程分支?

git git-remote git-tag git-branch

7
推荐指数
1
解决办法
5675
查看次数

在git中,列出自某些标记以来的所有标记

我正在使用标签来识别发布版本并识别任务的"开发完成"提交.做一个git tag我得到如下列表.

> git tag
v0.1.0
task_1768
task_2011
task_1790
task_1341
v0.1.1
task_2043
task_2311
v0.1.2
Run Code Online (Sandbox Code Playgroud)

假设所有标签都指向master分支上的提交,有没有办法列出所有标签,因为有些标签?例如,要生成v0.1.2发布中包含的所有任务的列表- 我正在寻找类似下面的内容(这不是实际的命令).

> git tag -l "task_*" --since v0.1.1
Run Code Online (Sandbox Code Playgroud)

获得如下输出.

task_2043
task_2311
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点git tag

有没有办法做到这一点git rev-list

(或者其他一些git命令?)

UPDATE

根据答案和评论,以下是我目前正在使用的内容.

> git log v0.1.1.. --decorate | grep -Eow 'tag: ([a-zA-Z0-9.-_]*)' | awk '{ print substr($0, 6); }'
task_2043
task_2311
v0.1.2

> git log v0.1.1.. --decorate | grep -Eow 'tag: ([a-zA-Z0-9.-_]*)' | awk '{ print substr($0, 6); }' …
Run Code Online (Sandbox Code Playgroud)

git git-tag git-rev-list

7
推荐指数
1
解决办法
5414
查看次数

删除或编辑未按下的Git标记

在我们公司,我们使用Git标签来触发生产构建.我刚刚在本地创建了一个标签

git tag -m "Tag message"
Run Code Online (Sandbox Code Playgroud)

但是我意识到我犯了一个拼写错误,如果我共享标签(将其推送到远程),将会破坏生产版本.

我可以删除或修改标签,因为我可以使用提交吗?我还没有将标签推送到远程存储库.

git git-tag

7
推荐指数
1
解决办法
3248
查看次数

如何知道 Git 标签是否已被移动?

我曾经git tag --force移动标签,现在我想在移动之前知道标签在哪里。

我在手册页和网站Pro Git § 2.6 Git Basics - Tagging 中都没有找到任何内容。

之前似乎没有人发布过这个问题。

git git-tag

7
推荐指数
1
解决办法
577
查看次数

为什么“git describe”在我干净的 git repo 副本上显示旧标签版本?

一些背景:

我目前有两个本地 git 存储库,它们指向同一个源/主项目。我有两个 git repos 的原因是我有一个干净的主副本,我可以在需要时随时使用,还有一个副本可以在我的沙箱中应用更改、提交等。这可能有点矫枉过正,但有一些优点对我个人来说,有一个重复的本地 git 副本。

一位同事最初为 1.0.2 创建了一个轻量级标签,但我们将其删除并重新标记为具有相同编号的带注释版本。他们通过 git push 将更改提交到远程仓库。我在我的本地 git 实例上拉下了最新的更改。

我们的标签如下:

release-1.0.0
release-1.0.1
release-1.0.2
Run Code Online (Sandbox Code Playgroud)

问题:

这是我无法弄清楚的问题。当我运行“ git describe”时,我的沙箱存储库会显示最新的标签版本(release-1.0.2)。这是我所期望的。但是,当我执行“ git describe”时,我只从其中提取的干净存储库副本显示旧标签(版本 1.0.1)。我验证了两者都指向原始主人。我做了一些更多的研究,发现了一个overstack 解决方案,它指出我运行“git cat-file -t”。这是我注意到的不同之处:

git cat-file -t release-1.0.1 --> tag 
git cat-file -t release-1.0.2 --> commit
Run Code Online (Sandbox Code Playgroud)

git describe与沙箱存储库不同,为什么我的干净副本存储库在运行“ ”时显示旧标签版本?如果我git describe --tags在干净的 repo 副本上运行“ ”,我可以确认我可以看到 release-1.0.2 列出。

tags git version git-tag git-describe

7
推荐指数
1
解决办法
3166
查看次数

如何通过 GitHub API 获取 Git 标签中的所有提交

我必须获取在 Git 存储库上创建新标签时作为一部分的所有新提交。这需要通过 GitHub API 来完成。

例如,Git UI 说 Tagging Tag1 并有一个与之关联的 sha...假设 sha 是:SHA1

现在我如何通过 GitHub API 获取所有发生的或属于 Tag1 的提交?我想存储所有这些提交并对它们进行一些分析。

github github-api git-commit git-tag

7
推荐指数
1
解决办法
3380
查看次数

如何git标记所有子模块?

我想标记我项目的所有子模块.我尝试这样做:

git submodule foreach git tag tagName
Run Code Online (Sandbox Code Playgroud)

......但它似乎只是没有错误地返回,没有做任何事情.

编辑:以下是我尝试的结果:

在此输入图像描述

有人能告诉我如何正确标记所有子模块吗?

注:这是一个非常类似的问题到这个职位,但是对于一个答案建议依靠超级项目的子模块裁判.但是,我实际上喜欢子模块的repo中的标签.

git git-submodules git-tag

7
推荐指数
1
解决办法
3985
查看次数

Monorepo版本标签约定

是否有在monorepos中使用版本标签的标准?是否符合1.0.0-myapp12.1.0-myapp2可接受的东西?还是有另一种方法来区分应用程序之间的版本?

git git-tag gitversion

7
推荐指数
1
解决办法
841
查看次数

验证是否在 master 分支中完成了标记

在我正在工作的这个项目中,我们根据标签进行部署。虽然标签必须针对 master 分支完成(在您合并发布之后),但有时有人可能会错误地针对 dev 或 release 分支进行标记,这是不正确的。这会导致几个问题。

在我们的部署脚本中,有一个步骤是我们从 git 克隆特定标签,使用的过程类似于此问题中描述的过程:使用 Git 下载特定标签

$ git clone
$ git checkout tags/<tag_name>
Run Code Online (Sandbox Code Playgroud)

如何修改此脚本以检查此标记是否实际上是针对 master 分支完成的?如果分支不是主分支,我想然后停止部署并抛出错误。

谢谢。

git version-control dvcs repository git-tag

7
推荐指数
3
解决办法
5032
查看次数