gpt4 book ai didi

Git:标记分支并从标记创建新分支

转载 作者:太空狗 更新时间:2023-10-29 14:29:01 25 4
gpt4 key购买 nike

我有一些自动化系统来标记我的 old 分支。我这样做是为了避免出现大量分支。

但有时我需要一些以前标记的分支来进行一些额外的更改。

有什么正确的方法来处理这个标签吗?

据我所知,我可以像这样从这些标签创建一个新分支:

git checkout -b <new_branch_name> <tag>

看起来不错,但是...

1) 我正在调用与分支的原始名称同名的标签。

2) 我想创建一个与原来同名的分支。

这是不可能的,因为它会引发错误:

warning: refname '<branch_name>' is ambiguous.
fatal: A branch named '<branch_name>' already exists.

我想补充的另一件事是,我希望在从中创建分支时删除此标记。

是否可以使用一些简单的分支创建命令来解决这个问题?

或者也许有人有类似的流程,可以提出更好的建议?

最佳答案

分支名称或标签名称在某种程度上只是一个简短的、人类可读的名称,用于表示您见过的那些又大又丑的 Git 哈希 ID。

X 这样的分支名称之间的区别真的很小和标签名称,如 X .事实上,主要区别在于:

  • 分支机构的全名 Xrefs/heads/X ;
  • 标签的全名 Xrefs/tags/X ;
  • 作为规则,标签名称永远不应该改变它命名的哈希 ID,但是分支名称通常确实随着时间的推移以明确定义的方式改变:它总是指向最新的提交添加到分支。

事实上,这正是 Git 如何知道分支上有哪些提交:分支名称 X ,这实际上是 refs/heads/X , 标识作为分支尖端的特定提交。然后该提交返回其父提交,它可能曾经是分支的尖端。父提交指的是它自己的父提交,等等;这就是分支的历史。

当 Git 告诉您分支名称时,它会去掉前导的 refs/heads/ .当它告诉您有关标签名称时,它会去掉前导的 refs/tags/ . (有一些异常(exception),但这是通常的规则。)

拥有两个缩写形式仅为 X 的事物通常是不明智的... 不是因为 Git 会感到困惑,而是因为 会。 Git 有非常精确的——尽管相当复杂——规则总是只选择一个……但并不总是你想要的那个。。这就是您收到警告消息的原因。

您的选择是忽略警告,或者更加努力地避免它。要更努力地工作,请使用 Git 的所谓 管道 命令。这些命令旨在从脚本中使用,因此具有非常可预测和可重复的行为,但它们往往需要大量输入(没关系,这是计算机在进行输入)。

创建、删除或更新引用的管道命令——reference 是“分支、标签或其他类似名称”的奇特长词——是 git update-ref , 它要求你拼出 refs/heads/Xrefs/tags/X每次。因此,您可以编写一个脚本来检查 refs/heads/<em>whatever</em> 是否存在。和/或 refs/tags/<em>whatever</em> ,并创建或删除“另一个”。

要查明是否存在,如果存在则获取其值,请使用管道命令 git rev-parse并拼出引用文献的全名。如果该名称不存在,该命令将失败(并返回非零状态,并且通常会打印一条消息,但您可以抑制此消息),如果该名称存在,则将打印出哈希 ID。

注意:删除分支名称时,也会删除其引用日志。分支(或任何引用,实际上)的 reflog 包含引用在过去 30 到 90 天左右的所有 previous 值(数字有点复杂,如果您可以调整喜欢)。由于标签通常不会移动,因此它们的引用日志(如果有的话)往往非常乏味:“此标签始终具有值 0f39ca43...” 分支,但是,确实移动,正如我们上面提到的,他们的 reflog 充满了“这个分支昨天指向的地方”等等。

关于Git:标记分支并从标记创建新分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45246364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com