我怎样才能提交一个旧的git标签?

时间:2010-11-11 02:35:30

标签: git github git-svn

因此,两个月前,我将SVN中的代码库迁移到了Git,并提供了完整的变更集历史记录。紧接着,我们标记了一个新版本并继续工作。因此,虽然我们继续使用新标签,但是有些人继续修复SVN中旧标签中的错误,现在我想将所有这些更改添加到Git中的标记中。

我可以克隆标签并让Git让我对它进行提交,但是我不能用git-push来备份任何东西。检查git-log,提交就在那里,但git-st告诉我,我目前不在任何分支上。

所以互联网,我怎么能承诺一个旧的git标签?

7 个答案:

答案 0 :(得分:62)

如果有人在搜索“替换git tag”或类似内容后来到这里,我推荐以下方法:

git tag -d <tagname>
git checkout <new commit or branch>
git tag -a <tagname>
git push <remotename> <tagname> -f

例如:

git checkout 2.0
git tag -d v2.0
git tag -a v2.0 -m"Version 2.0"
git push origin v2.0 -f

希望这有助于某人。

答案 1 :(得分:11)

标签不可移动。一旦创建了指向特定提交的标记,就不能在以后更改该标记。

听起来你打算创建一个分支。您应该创建一个新分支(git branch branchname && git checkout branchname)以确保不会丢失您的提交。然后将该分支推送到存储库,让您的发布/错误修复开发人员在该分支中工作以进行发布。

答案 2 :(得分:8)

答案 3 :(得分:8)

如果用户正在使用用户创建旧标记的相同分支,则首先创建新的更改列表。否则签出标签,然后创建新的更改列表。然后使用以下步骤使用新的更改列表编号更新现有标记

git tag -f <old tag name>

git push -f --tags

总计0(delta 0),重复使用0(delta 0)  + ... <old tag name> - &gt; <old tag name>(强制更新)

答案 4 :(得分:2)

这里有很多事情要发生。

  1. 听起来你对git tag的目的没有充分的了解。我建议您阅读man page以及relevant sectionPro GitPro Git也对该工具以及Git Magic进行了一般性的介绍。

  2. 正如其他人所指出的那样,你已经创建了一个分支并且正在提交它并且在这里错误地将它标识为标记,或者你实际上创建了一个标记并且已经在分支之外提交了新的提交,这很令人困惑。如果你还不知道,你肯定想阅读git branch以了解如何使用它。

  3. 听起来您和您的团队可以使用支持多个发布,维护和开发流的工作流程,为此我会谦虚地建议most excellent guide from Vincent Driessen。我和我的团队在我上一个雇主那里介绍了这个,它改变了我们的工作方式。阅读这应该会让你非常了解git如何最好地支持你的团队可能已经尝试工作的方式。

  4. 无法直接提交旧标记。正如其他人所指出的,标签只不过是特定提交的名称。但是,我在这里有一些可能对你有用的想法。

    1. 您始终可以通过git checkout -b my-new-branch name-of-tag根据代码检出分支。这将为您提供基于该标签的全新分支,然后您可以提交。分享该分支变得非常简单,只需将其推送到公共接触点并让其他人将其拉下来。

    2. 如果你想要一个移动的标签,那么你正在做一些“疯狂”的事情(至少在git tag手册页的作者的脑海中。他们部分正确,因为移动的标签是真的只是分支头,因此可以简单地成为一个分支。标签并不意味着成为故事的一部分。但是,如果你真的想要一个移动的标签,你可以通过跳过几个燃烧的箍并在匕首上跳跃来实现这一目标。按照git tag手册页的Re-Tagging Section中的说明进行操作。

答案 5 :(得分:1)

答案 6 :(得分:1)

您应该在标记的位置创建一个新分支,删除标记,进行提交,重新创建标记并推送。