如何只向git标记添加一个提交

时间:2012-07-20 18:17:11

标签: git versioning tagging

我已经创建了一个git标签,但后来我做了一些其他的提交,其中一个需要在标签中,其他的则没有。

例如:

git commit 123
git commit 456
git commit 789
git commit 1011
git commit 1213

我在点1011处制作了一个标记,但现在我想在其中添加提交123而不是其中任何一个。有办法吗?

3 个答案:

答案 0 :(得分:10)

从您的标记开始,您将要想要包含您想要包含的单个提交。然后,您将移动标记以指向新状态。

git checkout my_tag
git cherry-pick commit_123
git tag -f my_tag

将标签视为分支可能会有所帮助。就像分支一样,标记指的是提交历史中的特定点。所以你想要做的是有效地创建一个具有不同提交历史的新分支,然后标记该新状态。检查当前标记会使您回到原始点,在您想要添加的单个提交中进行逐字记录,然后重新标记会保存新的分支状态。您需要使用-f选项“移动”代码,否则会出现tag 'my_tag' already exists错误。

答案 1 :(得分:7)

我认为你的术语已经混淆了。

  • 标记是附加到单个提交的字符串标签。它不“包含”提交,它只是命名被标记的提交的另一种方式。
  • 分支是一组有序的提交,当您使用git commit时,您将把提交添加到当前分支。

目前尚不清楚你是否仅仅意味着分支而不是标记,或者你是否在问为什么输出例如git log mytag显示自1011之前的所有提交。

git log mytag将记录使用mytag及其所有父项标记的提交。

如果您的分支和您创建的分支在其历史记录中尚未包含提交123,则可以git cherry-pick

写这篇文章,我意识到你可能还意味着如何将提交123添加到git log mytag列出的提交集。为此,您需要在该点创建一个新分支git checkout -b mybranch mytag,然后选择提交提交123,然后使用git tag -f将标记移动到新提交。然后,您可以返回上一个分支(例如git checkout master)。您之前的分支将有不同的历史记录,分支机构已经分歧。

答案 2 :(得分:0)

如果所有更改仍然是本地的,您应该能够使用1213压缩1011提交并重新扣除提交的提交。