我已经创建了一个git标签,但后来我做了一些其他的提交,其中一个需要在标签中,其他的则没有。
例如:
git commit 123
git commit 456
git commit 789
git commit 1011
git commit 1213
我在点1011
处制作了一个标记,但现在我想在其中添加提交123
而不是其中任何一个。有办法吗?
答案 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
提交并重新扣除提交的提交。