说我的gerrit中的当前日志如下所示:
我的目标是创建一个应包含commit8和commit9的新标记(v1.73.0)并将其推送到origin。我被告知要根据最新的稳定标签创建一个新的本地分支,并挑选必要的提交并对其进行标记。但是,我在将标签推向掌握时遇到了一些问题。
这就是我所做的:
...现在,如何将v1.73.0推送到掌握?
结果:
答案 0 :(得分:50)
在git中,每个标签都被称为"指向"一个(一个)提交。实际上,分支也是如此:分支名称也只指向一个提交。
使这项工作成为两件事:
因此,分支和标签之间的主要区别在于标签不会移动。
要了解其工作原理,请考虑一个只有三次提交的简单git存储库。让我们为这些提交A
,B
和C
添加标签。第一次提交(A
)指向任何内容,因为它是第一次提交,而分支master
指向A
:
A <-- master
当您进行第二次提交时,git会创建指向B
的{{1}},并将分支名称前进到指向A
:
B
然后当你进行第三次提交时,git再次指向它的父提交,并推进分支:
A <- B <-- master
如果您现在制作代码,默认情况下,该代码将指向提交A <- B <- C <-- master
:
C
如果您再进行新的提交A <- B <- C <-- master
^
|
tag: sometag
,git将推进分支,而不是标记:
D
您可以随时创建或删除任何指向任何特定提交的标记:
A <- B <- C <- D <-- master
^
|
tag: sometag
将删除标记$ git tag -d sometag
,之后:
sometag
将添加$ git tag sometag master~2
指向提交sometag
。 1
(我们刚刚证明了标签可以移动。真正的区别在于标签不是预期移动,而分支是;并且git赢了& #39; t自动移动标签。 2 分支通常预期在&#34; forward&#34;方向移动,即,如果B
用于指向提交{{1现在指向提交master
,通常应该从C
开始并向后工作找到提交D
。每当你移动一个分支以便违反此规则时,你&# 39;重写&#34;重写历史&#34;;查看其他文章,了解何时可以,以及什么时候会引起人们的麻烦。)
当您使用C
时,您真正在做的是指示其他一些git存储库接受您不具备的任何新提交,然后设置一些名称 - 通常是分支和/或标记 - 指向生成的集合中的一些提交(每个一个)。 3 这些名称(分支,标签等)被称为&#34;引用&#34;总的来说,让我们使用&#34; branch&#34;和&#34;标记&#34;现在。
D
之后的参数命名存储库(通常通过&#34;远程&#34;名称,如git push
)来推送。如果你把它留下来,git会尝试找出一个,但如果你想添加一个分支或标签名称,你需要明确地包括它,因为这里的第一个单词被假定为远程名称。 (也就是说,git push
尝试使用origin
作为远程名称而不是分支名称。)
要推送所有您的代码,您只需将git push master
添加到master
命令:
--tags
要推送特定的标记,您可以将其命名为:
git push
正如您可以推送特定分支一样:
git push --tags origin
(事实上,第四个参数是名称的对,例如git push origin sometag
或git push origin master
,但在大多数情况下,默认情况下两边都使用相同的名称 4 )
如果你不需要它来制作所有参数,你可以省略名称master:master
,例如,sometag:sometag
与origin
相同(假设你所有的推动无论如何,请转到git push --tags
。
要在遥控器中设置标签,请先使用git push --tags origin
在本地设置标签。使用您喜欢的任何查看器以确保正确设置。然后使用origin
或git tag name commit-identifier
推送它。
1 git push origin name
语法指示git从通过git push --tags
找到的提交开始,然后备份两个步骤。您可以在此处为提交master~2
编写原始SHA-1。
2 旧版本的git(1.8.4之前版本)在推送时意外地将分支规则应用于标签(在远程端,即如果标签是&#34,它们会让标签移动;快进&#34;)。
3 在某些情况下,您可以将名称指向&#34;带注释的标签&#34;,并且没有任何阻止名称指向&#34;树&#34;或者&#34; blob&#34;也可以是对象,但这不是正常的设置。
4 实际上,分支的默认 dst refspec很复杂:它取决于您的master
配置,以及是否有B
设置,是否有上游配置,等等。对于标签,规则更简单,因为没有&#34;上游&#34;。
答案 1 :(得分:14)
这是一个具体的例子:
git add .
git commit -m "some description"
git tag v0.1.9 # or any other text
git push origin master # push the commit
git push --tags origin # push the tags
答案 2 :(得分:2)
一旦你创建了标签(看起来你已经完成了),只需运行
即可git push --tags origin
答案 3 :(得分:1)
这就是你想要的
git add .
git commit -m "commit10"
git tag -a v1.73.0 -m "Latest release (or some message)"
git push origin master
git push origin v1.73.
答案 4 :(得分:0)
创建标签很简单,下面是一个命令:-
示例:
git tag -a v1.0 7cceb02 -m "Your message here"
其中 7cceb02
是提交 ID 的开始部分。
然后您可以使用 git push origin v1.0
推送标签。
您可以执行 git log
以显示当前分支中的所有提交 ID。