git push --tag 保持提交
git push --tag keeps commits
推送给master的时候,看了推荐使用:
git tag -a <tag name> -m <message> ; git push --tags
我添加了一个新的标签,并推送了更改到master,现在我修改了另一个文件,想用相同的标签将它推送到master。
我这样做:git push --tags -f
,我收到 "Everything up-to-date" 消息。但是当我这样做时:git status
我仍然看到:"Your branch is ahead of 'origin/master' by 2 commits"
为什么会这样?我需要做什么才能将新更改添加到标签?
git push --tag
只推送标签,不推送提交。
你需要用
推送
git push --all
如果有新标签,则:
git push --all; git push --tag
不是git push --tags
。 --tags
将推送标签的所有引用,而不是在 master 分支上提交。我不知道你在哪里读到这个建议,但并不真正鼓励不断标记。通常,当您有新版本的软件时,您会标记。换句话说,一个重要的里程碑。不适用于普通提交。
此外,我强烈反对(完全)自动使用 -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
会起作用。问题是通常使用标签来指定发布。用户可能会说:啊哈,最新版本是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
。
当您 运行 一个 git push
时,会发生几件事:
- 一些提交被发送到远程存储库
- 远程分支(例如远程机器上的
master
)更新为指向最新的提交
- 远程跟踪分支(例如本地计算机上的
origin/master
)已更新以反映远程分支上的更改
通过指定 --tags
,您可以修改行为以仅更新标签引用(加上您可能已在命令行中指定但您没有指定的其他一些引用)。如果你标记了最新的提交,那么这个提交和它的所有祖先都被推送了,但是你没有完成上面的步骤 2 和 3。结果
- 查看您的远程存储库的用户会看到标签,但会看到一些提交后面的分支
- 由于
git status
使用remote-tracking分支判断你是否领先于remote,它会告诉你你领先于remote。
最简单的解决方案是 运行 两次推送:
git push
像往常一样推送您的分支(如 push.default
所指定,即如果当前分支与最近 Git 同名,则将当前分支推送到配置的上游)
- 创建标签后,
git push --tags
推送您的标签(几乎不需要时间,因为提交已经推送,Git 只需在远程存储库上创建标签)
如果您想同时进行这两项操作,请查看问题 Push git commits & tags simultaneously 的答案。
请注意,没有理由为您的每个 个推送创建标签。通常,人们只为发布创建标签。
推送给master的时候,看了推荐使用:
git tag -a <tag name> -m <message> ; git push --tags
我添加了一个新的标签,并推送了更改到master,现在我修改了另一个文件,想用相同的标签将它推送到master。
我这样做:git push --tags -f
,我收到 "Everything up-to-date" 消息。但是当我这样做时:git status
我仍然看到:"Your branch is ahead of 'origin/master' by 2 commits"
为什么会这样?我需要做什么才能将新更改添加到标签?
git push --tag
只推送标签,不推送提交。
你需要用
推送git push --all
如果有新标签,则:
git push --all; git push --tag
不是git push --tags
。 --tags
将推送标签的所有引用,而不是在 master 分支上提交。我不知道你在哪里读到这个建议,但并不真正鼓励不断标记。通常,当您有新版本的软件时,您会标记。换句话说,一个重要的里程碑。不适用于普通提交。
此外,我强烈反对(完全)自动使用 -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
会起作用。问题是通常使用标签来指定发布。用户可能会说:啊哈,最新版本是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
。
当您 运行 一个 git push
时,会发生几件事:
- 一些提交被发送到远程存储库
- 远程分支(例如远程机器上的
master
)更新为指向最新的提交 - 远程跟踪分支(例如本地计算机上的
origin/master
)已更新以反映远程分支上的更改
通过指定 --tags
,您可以修改行为以仅更新标签引用(加上您可能已在命令行中指定但您没有指定的其他一些引用)。如果你标记了最新的提交,那么这个提交和它的所有祖先都被推送了,但是你没有完成上面的步骤 2 和 3。结果
- 查看您的远程存储库的用户会看到标签,但会看到一些提交后面的分支
- 由于
git status
使用remote-tracking分支判断你是否领先于remote,它会告诉你你领先于remote。
最简单的解决方案是 运行 两次推送:
git push
像往常一样推送您的分支(如push.default
所指定,即如果当前分支与最近 Git 同名,则将当前分支推送到配置的上游)- 创建标签后,
git push --tags
推送您的标签(几乎不需要时间,因为提交已经推送,Git 只需在远程存储库上创建标签)
如果您想同时进行这两项操作,请查看问题 Push git commits & tags simultaneously 的答案。
请注意,没有理由为您的每个 个推送创建标签。通常,人们只为发布创建标签。