通过特定标签克隆git-reo后,如何获取相应的分支名称



我希望标记仅用于位桶管道中的发布分支。我的想法是通过标记或提交找到分支名称,然后检查它。

但这个存储库是通过管道中的标签获得的。

git clone --branch="{tag_name}" {repository_address}
git reset --hard {commit_num}

在这种情况下,没有分支。

$ git branch
* (no branch)

我尝试了各种方法,但无法通过标记或提交获得相应的分支名称。

通过git branch -r --contains {commit_num}有几个分支。我不知道哪个是对应的特定分支。

我很困惑。我的用法或想法错了吗?

恐怕你的想法是错误的。分支和提交没有一对一的映射。想想回购的初始承诺:所有分支都包含它!

如果你想继续在一个发布系列上进行开发,那么有一个以其标签的major.minor版本命名的分支,并在发布了更高版本后保持其活动状态,这在某种程度上是传统的,例如后台安全修复。通过这种方式,您可以简单地克隆X.Y系列的分支,而不是vX.Y.Z标记。

请记住,最新版本可能会包含大多数过去的标签。例如,3.0分支只会不包含从2.X.分叉出的3.0分支之后生成的v2.X.Y标记

默认情况下,git clone命令复制所有提交,而不复制任何分支1然后它创建一个分支,即您用-b指定的分支2如果用-b指定标记,它将创建分支,只检查标记指定的提交。

其他Git存储库作为分支名称的每个名称现在都是存储库中的远程跟踪名称。它们列在git branch -r输出下,或与git for-each-ref refs/remotes一起列出。

通过git branch -r --contains {commit_num}有几个分支。我不知道哪个是对应的特定分支。

它对应于所有分支。提交通常同时出现在多个分支中。这是分支名称在Git中并不重要的众多原因之一。真正重要的是哈希ID。只是人类喜欢使用分支名称来查找哈希ID,而Git适合我们。

(如果您可以通过标记名称找到提交,则无需在任何分支上进行该提交。有些提交,例如git stash所做的提交,通常也不在任何分支上。哈希ID才是真正重要的。但如果您找不到哈希ID,您甚至无法判断是否有提交,因为我们使用名称-分支名称、标记名称、"存储"等--要查找某些提交的哈希ID,然后使用这些提交来查找更多提交,您需要一些名称来查找一些commit来查找commit来找到您关心的提交,除非您已经记住了哈希ID。(


1从技术上讲;"可达";提交,由您正在克隆的存储库中的Git软件发送。但在实践中,这几乎是所有的承诺。

2如果省略了-b选项,则Git软件会询问其他存储库的Git软件他们推荐的分支名称,并使用该名称作为-b参数。

最新更新