当推送到主人时,我读到建议使用:
git tag -a <tag name> -m <message> ; git push --tags
我添加了一个新标记,并将更改推送到主文件,现在我修改了另一个文件,并希望将其推送到具有相同标记的主文件。
我做:git push --tags -f
,我得到了#34;一切都是最新的&#34;信息。但是,当我这样做时:git status
我仍然看到:&#34;你的分支领先于原产地/大师&#39;由2个提交&#34;
为什么会这样?我需要做些什么来为标签添加新的更改?
答案 0 :(得分:1)
你需要推进
git push --all
如果有新标签,请使用:
git push --all; git push --tag
不是git push --tags
。 --tags
将推送标签的所有引用,而不是主分支上的提交。我不知道你在哪里读过这个建议,但不经常标记不是真的鼓励。通常,当您拥有软件的新版本时,请标记。换句话说,这是一个重要的里程碑。不是普通的提交。
此外,我强烈建议不要自动使用-f
(也称为--force
)标志(完全)。如果存储库不同步,最好不要强制提交共享存储库。如果有警告,您必须尝试解决它们,而不是立即否决这些警告。
一般建议是学会使用工具,而不是按照几个步骤,而不会意识到幕后的内容。
修改强>:
第二次添加标记时可能会收到错误:
fatal: tag 'foo' already exists
(foo
标签的名称)。正如声明所说,你不能简单地用相同的名称标记两次。 git push --tags
将内容提交至该标记。由于您为标记分配了先前的提交,因此您将推送到该提交,而不是最新的提交。你可以做一些事情:
git push --tags
; git tag -f -a <tag name> -m <message>
。在这种情况下,旧标签将被删除。而且git push --tags
会奏效。问题是通常使用标签来指定版本。用户可能会说: aha,最新版本为release-2.3
,我不必更新软件,而新release-2.3
与旧版本不同。使用release-2.3-fix0
进行注释可能会让他们意识到您修复了某些内容。git push --all
将提交推送到所有分支的负责人。<强>背景强>
您可以看到您的提交图:
A -- B -- C -- D
/
<tag>
如果您致电git push --tag
,它会同步A
,B
和C
,因为这是<tag>
监督下的最后一次提交。如果您重新加注,则会将代码分配给D
。
答案 1 :(得分:1)
运行git push
时,会发生以下几种情况:
master
)已更新为指向最新提交origin/master
)以反映远程分支上的更改通过指定--tags
,您可以修改行为以仅更新标记引用(以及您可能在命令行中指定的其他一些引用,但您没有这样做)。如果您标记了最新的提交,那么此提交及其所有祖先都被推送,但您没有完成上面的步骤2和3。结果
git status
使用远程跟踪分支来确定您是否位于遥控器之前,它会告诉您自己位于遥控器之前。最简单的解决方案是进行两次推送:
git push
像往常一样推送你的分支(由push.default
指定,即如果它与最近的Git具有相同的名称,则将当前分支推送到配置的上游)git push --tags
推送您的标记(因为提交已经被推送几乎没有时间,Git只需要在远程存储库上创建标记)如果您想同时执行这两项操作,请查看问题Push git commits & tags simultaneously的答案。
请注意,没有理由为推送每个创建一个标记。通常,人们只为发布创建标签。
答案 2 :(得分:0)
git push --tag
只推送标签,而不是提交。